7

我已经多次阅读了几页 Google 结果,我对如何布局我的项目感到非常困惑。我已经设法让 Celerybeat 使用periodic_task 装饰器工作,但它已被贬值并且正在被删除。据我了解,文档建议 CELERYBEAT_SCHEDULE 是替代品。我已经创建了一个完全如图所示的文件,但还没有弄清楚:

  • 如何命名?
  • 放在哪里?

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

4

1 回答 1

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'

试图把它放到一个文件中beatschedule.py然后运行celery -A beatschedule beat会让你AttributeError: 'module' object has no attribute 'celery'

我创建了这个项目来演示文档中描述的 Celerybeat。我相信它比单独阅读文档更好地展示了它是如何工作的。我还创建了这个 Docker 映像以使其启动和运行尽可能简单。

于 2015-03-06T08:17:51.523 回答