我为Celery结果添加了一个后端,我在发送任务时遇到了问题,有些人被接受了,而其他人则没有。
执行和未执行的任务都显示此日志输出:
[2014-06-09 15:50:59,091: INFO/MainProcess] Received task: tasks.multithread_device_listing[e3ae6d12-ad4b-4114-9383-5802c91541f2]
然后执行的那些显示此输出:
[2014-06-09 15:50:59,093: DEBUG/MainProcess] Task accepted: tasks.multithread_device_listing[e3ae6d12-ad4b-4114-9383-5802c91541f2] pid:2810
虽然AREN&T; T执行的任务从未到达上述行。
我如何发送任务:
from celery import group
from time import sleep
signatures = []
signature = some_method_with_task_decorator.subtask()
signatures.append(signature)
signature = some_other_method_with_task_decorator.subtask()
signatures.append(signature)
job = group(signatures)
result = job.apply_async()
while not result.ready():
sleep(60)
我的celery配置报告它是:
software -> celery:3.1.11 (Cipater) kombu:3.0.18 py:2.7.5
billiard:3.3.0.17 py-amqp:1.4.5
platform -> system:Darwin arch:64bit imp:CPython
loader -> celery.loaders.app.AppLoader
settings -> transport:amqp results:amqp://username:pass@localhost:5672/automated_reports
CELERY_QUEUES:
(<unbound Queue automated_reports -> <unbound Exchange default(direct)> -> automated_reports>,)
CELERY_DEFAULT_ROUTING_KEY: '********'
CELERY_INCLUDE:
('celery.app.builtins',
'automated_reports.queue.tasks',
'automated_reports.queue.subtasks')
CELERY_IMPORTS:
('automated_reports.queue.tasks', 'automated_reports.queue.subtasks')
CELERY_RESULT_PERSISTENT: True
CELERY_ROUTES: {
'automated_reports.queue.tasks.run_device_info_report': { 'queue': 'automated_reports'},
'uploader.queue.subtasks.multithread_device_listing': { 'queue': 'automated_reports'},
'uploader.queue.subtasks.multithread_individual_device': { 'queue': 'automated_reports'},
'uploader.queue.tasks.multithread_device_listing': { 'queue': 'automated_reports'},
'uploader.queue.tasks.multithread_individual_device': { 'queue': 'automated_reports'}}
CELERY_DEFAULT_QUEUE: 'automated_reports'
BROKER_URL: 'amqp://username:********@localhost:5672/automated_reports'
CELERY_RESULT_BACKEND: 'amqp://username:pass@localhost:5672/automated_reports'
我的启动命令是:
~/Documents/Development/automated_reports/bin/celery worker --loglevel=DEBUG --autoreload -A automated_reports.queue.tasks -Q automated_reports -B --schedule=~/Documents/Development/automated_reports/log/celerybeat --autoscale=10,3
此外,当我停止芹菜时,它会从我的队列中拉出从未被接受的任务。然后当我重新启动时,它接受并执行它们。
非常感谢任何有关此行为的帮助。我确定它与我的后端配置有关,但我很难隔离问题或纠正。谢谢!
答案 0 :(得分:1)
我找到了答案。
我注意到'inqueue'似乎在某些情况下正确接收任务,而不是其他情况。当我搜索Celery文档时,我发现了这个注释:http://celery.readthedocs.org/en/latest/whatsnew-3.1.html?highlight=inqueue#caveats
我在一个长期运行的任务中执行子任务,所以这听起来非常像我所看到的行为。另外,我在提到的版本,而在以前的版本,我没有使用相同的配置这个问题。
我添加了-Ofair参数来启动worker,它立即解决了问题。