我正在使用芹菜,想将广播任务发送给几个工人。我正在尝试按照 http://docs.celeryproject.org/en/latest/userguide/routing.html#broadcast 上描述的那样进行操作,所以我创建了带有任务的简单应用程序:
@celery.task
def do_something(value):
print value
在我制作的应用程序中:
from kombu.common import Broadcast
CELERY_QUEUES = (Broadcast('broadcast_tasks'), )
CELERY_ROUTES = {'my_app.do_something': {'queue': 'broadcast_tasks'}}
然后我试图通过以下方式将任务发送给工人:
my_app.do_something.apply_async(['222'], queue='broadcast_tasks')
或:
my_app.do_something.apply_async(['222'])
但不幸的是,在第一种方式中,任务一次只"正常"发送给一个工人 - 所以如果我有两个工人,那么任务会完成一次或第一个,第二个工人一次。第二种方式,我不知道在哪里完成这项任务,因为在任何工人身上都没有结果。也许你们中的某个人会知道为什么它不像广播那样工作,以及我在这里做错了什么。提前感谢您的帮助。
您使用什么代理?
如果您使用的是 Redis,目前它将无法按照以下线程中的说明工作:
https://groups.google.com/forum/#!searchin/celery-users/broadcast/celery-users/s4v_0ndiLT8/rJSME59TQ4YJ
我正在使用RabbitMQ,它工作正常。