我的问题是节拍调度程序不会在表
tasks
和 workers
中存储条目。我用 Django 和芹菜。在我的数据库 (MySQL) 中,我添加了一个名为“估计区域”的定期任务,间隔为 120 秒。
这就是我开始工作的方式:
python manage.py celery worker -n worker.node1 -B --loglevel=info &
启动worker后,我可以在终端中看到worker正在工作,调度程序从数据库中挑选周期性任务并运行它。
我的任务是如何定义的:
@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 管理面板中的 tasks
或 workers
中没有数据库条目。
这是我在
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:[email protected]'
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'`
我希望有人能帮助我:)