2017-08-20 3 views
12

Celery(RabbitMQをバックエンドMQとしている)を活用して、さまざまなキューからさまざまなフレーバのタスクを実行したいと考えています。 1つの要件は、特定のキューからの消費者(作業者による)が一時停止して再開する能力を持つ必要があることです。セロリーadd_consumerが呼び出された後にワーカーがタスクを消費しない

セロリは、this capabilityと表示されており、add_consumercancel_consumerと呼びます。特定のワーカーの待ち行列からタスクの消費を取り消すことができましたが、従業員にadd_consumerを呼び出すことで、消費を再開させることはできません。 The code to reproduce this issue is provided here。私の推測では、celeryconfigの中で提供されるパラメータや、ワーカーを起動する際の引数を使用して、何らかのパラメータが欠落している可能性がありますか?

これについていくつか新鮮なペアを取得することは素晴らしいことでしょう。 add_consumerやGithubに関するStackoverflowに関する議論はあまりありません。だから私は、ここにいくつかの専門家が彼らの思考/経験を共有して欲しいと思っています。

-

私は、以下の実行しています:あなたは、キューから再開するには

のWindows OS、RabbitMQの3.5.6、アーラン18.1、Pythonの3.3.5、セロリ3.1.15

答えて

2

をキュー名とターゲットワーカーを指定する必要があります。ここでそれを行う方法です。ここで

app.control.add_consumer(queue='high', destination=['[email protected]']) 

がadd_consumer署名あなたの場合

def add_consumer(state, queue, exchange=None, exchange_type=None, 
      routing_key=None, **options): 

で、あなたはとてもhigh状態に渡さなっていると、キューが空である

app.control.add_consumer('high', destination=['[email protected]']) 

と呼んでいます。だから、再開することはできません。

+0

お試しいただきありがとうございます。この動作を再現するために私が提供しているマルチファイル要点は、add_consumerを使用しています。作業者はadd_consumerの実行を確認しても、キュー内のタスクの消費を再開しません。私は自分のceleryconfigが正しく設定されていないか、またはセロリに潜在的なバグがあると考えています。 – teng

+0

@teng消費者の追加中に 'queue = high'を試しましたか?私はあなたの要点を使って行動を再現しました。適切なパラメータを渡した後、正しく動作しています。 – ChillarAnand

+0

私はkwargとしてadd_consumerに 'queue = high'を追加しました。これはargだけに反し、resume.pyの実行後もワーカーはまだタスクを消費していません。あなたのOSが何であるか、あなたが使っているrabbitmqとセロリのバージョンを教えてもらえますか? – teng

関連する問題