Rabbitmq 芹菜不能接受任务

Rabbitmq 芹菜不能接受任务,rabbitmq,celery,celery-task,Rabbitmq,Celery,Celery Task,我正在为芹菜结果添加一个后端,我遇到了一个问题:我发送任务,有些任务被接受,而另一些任务不被接受 正在执行和未执行的任务都显示此日志输出: [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/Ma

我正在为芹菜结果添加一个后端,我遇到了一个问题:我发送任务,有些任务被接受,而另一些任务不被接受

正在执行和未执行的任务都显示此日志输出:

[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
而未执行的任务永远不会到达上述行

如何发送任务:

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)
我的芹菜配置从报告它是:

    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'
而且,当我停止芹菜时,它会将从未接受的任务从我的队列中拉出来。然后,当我重新启动时,它接受并执行它们


非常感谢您对这种行为的任何帮助。我确信这与我的后端配置有关,但我很难隔离问题或纠正问题。谢谢

我找到了答案

我注意到“inqueue”在某些情况下似乎能够正确地接收任务,但在其他情况下却不能。当我搜索芹菜文档时,我发现了这张便条:

我在一个长时间运行的任务中执行子任务,所以这听起来很像我看到的行为。另外,我使用的是上面提到的版本,而在以前的版本中,我在相同的配置中没有遇到这个问题

我在启动worker时添加了-Ofair参数,它立即解决了这个问题

~/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