我已经多次阅读了几页 Google 结果,我对如何布局我的项目感到非常困惑。我已经设法让 Celerybeat 使用periodic_task 装饰器工作,但它已被贬值并且正在被删除。据我了解,文档建议 CELERYBEAT_SCHEDULE 是替代品。我已经创建了一个完全如图所示的文件,但还没有弄清楚:
- 如何命名?
- 放在哪里?
我发现很难找到在非 Django项目中使用 Celery 的正确方法。
文档使您的 CELERYBEAT_SCHEDULE 看起来像一个单独的文件,这有点令人困惑。实际上,它是您的应用程序(又名:Celery() 实例)配置中的一个条目,您可以在此处看到它。因此,无论您如何将配置放入您的应用程序,这就是它的去向。
有很多方法可以将配置导入应用程序。如果您相信“显式优于隐式”,那么您可能想要:
celeryconfig.py
import celeryconfig
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 映像以使其启动和运行尽可能简单。