【问题标题】:Does Celery cache tasks? How can I reload changes in a dev environment?Celery 缓存任务吗?如何在开发环境中重新加载更改?
【发布时间】:2020-08-01 05:23:57
【问题描述】:

当使用 Celery、Docker、RabbitMQ 和 Django(使用 django-celery-resultsdjango-celery-beat)时,我可以在 tutorial 之后加载一个简单的任务。

但是,当我对任务进行更改并重新加载服务器(docker-compose downdocker-compose up)时,这些更改不会反映出来。 Celery 是否在某处缓存任务/在开发环境中如何重新加载它们?本教程设置了CELERY_CACHE_BACKEND = 'django-cache',但我认为这已被docker-compose down 破坏?

例如,从 settings.py 中的 tasks.py 和 CELERY_BEAT_SCHEDULE 中删除任务不会阻止它在服务器重新启动时加载。

celery.py:

from __future__ import absolute_import, unicode_literals

import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

项目/__ 初始化 __ .py:

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ('celery_app',)

tasks.py:

from __future__ import absolute_import, unicode_literals
from celery import shared_task

@shared_task
def hello_world():
   return print('hello world!')

settings.py:

CELERY_BROKER_URL = 'pyamqp://rabbitmq:5672'
CELERY_RESULT_BACKEND = 'django-db'
CELERY_CACHE_BACKEND = 'django-cache'
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
CELERY_BEAT_SCHEDULE = {
    'hello':
        {
            'task': 'proj.tasks.hello_world',
            'schedule':
                crontab()  # execute every minute
        }
}

【问题讨论】:

    标签: python django docker celery django-celery


    【解决方案1】:

    celery 中没有自动重载功能(在版本 4 中被删除,它是实验性的)

    --autoreload 功能已被移除。

    这是一项实验性功能,不在我们弃用的范围内 时间保证。该标志被完全移除,因此工人将 存在时在启动时崩溃。幸运的是,这个标志没有用于 生产系统。

    您可以编写自己的解决方案来监视文件更改,使用看门狗或其他东西来重新启动工作器,或者只是重新启动容器/重新运行工作器

    【讨论】:

    • 谢谢。我不明白的是,当我使用docker-compose down 这应该重新启动容器,不是吗?它是如何持续存在的?
    • 到底发生了什么,你如何确定代码没有改变?停止你的容器就足够了
    • 你用的是什么操作系统,docker版本是什么
    • Windows 10 专业版,Docker 版本 19.03.8,构建 afacb8b
    • 可能是这个,github.com/docker/for-win/issues/5530,bash 到你的容器中,看看是否有文件更改,也回答上面的第一个问题 -> 这在 2205 版本中修复了docs.docker.com/docker-for-windows/release-notes/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 2021-06-22
    • 2018-01-25
    • 2023-04-07
    • 2015-11-11
    • 2020-06-16
    相关资源
    最近更新 更多