CELERYBEAT_SCHEDULE在你的项目中去哪儿了?

Bru*_*sky 7 python celery celerybeat

我多次阅读了几页谷歌搜索结果,我对如何布置项目非常困惑.我已经设法让Celerybeat使用periodic_task装饰器工作,但是这是折旧的并且正被删除.根据我的理解,文档建议CELERYBEAT_SCHEDULE是替代品.我完全按照所示创建了一个文件,但还没有想到:

  • 怎么命名呢?
  • 在哪里放?

我发现很难找到在非Django项目中使用Celery的正确方法.

Bru*_*sky 8

文档使它看起来像你的CELERYBEAT_SCHEDULE是一个单独的文件,这有点令人困惑.实际上,它是您的应用程序(又名:Celery()实例)配置中的一个条目,因为您可以在此处看到它.因此,无论您将配置放入您的应用程序,它就在哪里.

有很多方法可以将配置纳入应用程序.如果您认为" 明确比隐含更好 ",那么您可能希望:

  1. 把你的配置放到一个模块中,比如 celeryconfig.py
  2. 导入定义或使用应用程序的模块. import celeryconfig
  3. 将模块对象应用于您的应用程序. app.config_from_object(celeryconfig)

示例celeryconfig.py文件

from datetime import timedelta

BROKER_URL = "redis://redis.local:6379/0"
BROKER_TRANSPORT_OPTIONS = {'fanout_prefix': True, 'fanout_patterns': True, 'visibility_timeout': 480}
CELERY_RESULT_BACKEND = BROKER_URL

CELERYBEAT_SCHEDULE = {
    'addrandom-to-16K-every-2-seconds': {
        'task': 'celery_test.tasks.addrandom', # notice that the complete name is needed
        'schedule': timedelta(seconds=2),
        'args': (16000, 42)
    },
}

CELERY_TIMEZONE = 'UTC'
Run Code Online (Sandbox Code Playgroud)

试着将它放入一个像beatschedule.py然后运行的文件celery -A beatschedule beat将得到你AttributeError: 'module' object has no attribute 'celery'

我按照文档中的描述创建了这个项目来演示Celerybeat.我相信它比单独阅读文档更好地展示了它的运作方式.我还创建了这个Docker镜像,使其尽可能简单地运行起来.