我的问题是节拍调度程序没有将条目存储在“任务”和“工作人员”表中。我用 django 和 celery。在我的数据库(MySQL)中,我添加了一个间隔为 120 秒的周期性测试“估计区域”。
这就是我开始我的工人的方式:
`python manage.py celery worker -n worker.node1 -B --loglevel=info &`
在我启动工作人员后,我可以在终端中看到工作人员正在工作,并且调度程序从数据库中挑选出周期性任务并对其进行操作。
我的任务是如何定义的:
@celery.task(name='fv.tasks.estimateRegion',
ignore_result=True,
max_retries=3)
def estimateRegion(region):
终端显示:
WARNING ModelEntry: Estimate Region fv.tasks.estimateRegion(*['ASIA'], **{}) {<freq: 2.00 minutes>}
[2013-05-23 10:48:19,166: WARNING/MainProcess] <ModelEntry: Estimate Region fv.tasks.estimateRegion(*['ASIA'], **{}) {<freq: 2.00 minutes>}>
INFO Calculating estimators for exchange:Bombay Stock Exchange
任务“估计区域”返回给我一个 results.csv 文件,所以我可以看到工作人员和节拍调度程序工作。但在那之后,我的 django 管理面板中的“任务”或“工人”中没有数据库条目。
这是我在 settings.py 中的芹菜设置
` CELERY_DISABLE_RATE_LIMITS = True CELERY_TASK_SERIALIZER = 'pickle' CELERY_RESULT_SERIALIZER = 'pickle' CELERY_IMPORTS = ('fv.tasks') CELERY_RESULT_PERSISTENT = True
# amqp settings
BROKER_URL = 'amqp://fv:password@localhost'
#BROKER_URL = 'amqp://fv:password@192.168.99.31'
CELERY_RESULT_BACKEND = 'amqp'
CELERY_TASK_RESULT_EXPIRES = 18000
CELERY_ROUTES = (fv.routers.TaskRouter(), )
_estimatorExchange = Exchange('estimator')
CELERY_QUEUES = (
Queue('celery', Exchange('celery'), routing_key='celery'),
Queue('estimator', _estimatorExchange, routing_key='estimator'),
)
# beat scheduler settings
CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler"
# development settings
CELERY_RESULT_PERSISTENT = False
CELERY_DEFAULT_DELIVERY_MODE = 'transient'`
我希望任何人都可以帮助我:)