1

我的问题是节拍调度程序没有将条目存储在“任务”和“工作人员”表中。我用 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'`

我希望任何人都可以帮助我:)

4

1 回答 1

5

你开始 celerycam 了吗?

python manage.py celerycam

它将拍摄当前任务状态的快照(默认为每 1 秒)。

您可以在celery 文档中了解更多信息

于 2013-05-23T09:07:35.150 回答