我已经多次阅读了几页Google搜索结果,而且我对如何布置项目感到非常困惑。我设法让Celerybeat使用periodic_task装饰器工作,但那是depreciated and is being removed。据我所知,the docs表明CELERYBEAT_SCHEDULE是替代品。我已经完全按照所示创建了一个文件,但还没有想到:
我发现很难找到在非Django 项目中使用Celery的正确方法。
答案 0 :(得分:8)
the docs让你的CELERYBEAT_SCHEDULE看起来像是一个单独的文件,这有点令人困惑。实际上,它是您的应用程序(又名:Celery()实例)配置中的一个条目,您可以see it listed here。因此,无论您将配置添加到您的应用程序中,都可以使用它。
有很多方法可以让配置进入应用程序。如果你相信“Explicit is better than implicit”,那么你可能想:
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'
我按照文档中的说明创建了this project来演示Celerybeat。我相信它比单独阅读文档更能展示它的运作方式。我还创建了this Docker image以使其尽可能简单地运行起来。