5

私はセロリを使用しており、ブロードキャストタスクを数人のワーカーに送信したいと考えています。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'])

残念ながら、最初の方法では、タスクは「通常」一度に1人のワーカーにのみ送信されます。したがって、2人のワーカーがいる場合、タスクは1回または最初に2番目のワーカーで1回実行されます。2番目の方法では、このタスクがどこで行われたかわかりません。どのワーカーにもその結果がないためです。たぶん、あなたの誰かがブロードキャストのように機能しない理由と、ここで私が間違っていることを知っているでしょう。助けてくれてありがとう。

4

1 に答える 1

0

どのブローカーを使用していますか?

Redis を使用している場合、現在、このスレッドで説明されているように機能しません。

https://groups.google.com/forum/#!searchin/celery-users/broadcast/celery-users/s4v_0ndiLT8/rJSME59TQ4YJ

私は RabbitMQ を使用していますが、問題なく動作します。

于 2013-11-27T10:02:50.340 に答える