17

etaが3〜20時間のタスクを作成していますが、ワーカーログを見ると、このタスクの場合、Got task from broker: ...元のタスクを受け取ってからetaに達するまで、ワーカーは「」と言います。

BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': X}これは、Xが秒単位の数値である設定と関係があることを私は知っています。

そこで、visibility_timeoutで遊んで、1時間未満に設定すると、ワーカーがX秒ごとに同じタスクを取得するのを確認できますが、visibility_timeoutXを1時間より大きく設定すると、デフォルトで1時間になります。私が設定した時間。

他の誰かがこの問題に遭遇しますか?これは既知のバグですか?

Redisサーバーバージョン2.4.15でCelery3.0.11(Chiastic Slide)を使用しています

4

1 に答える 1

9

編集: 同じ Redis URL に接続された kombu* を使用するメッセージ コンシューマーは、確認応答されていないメッセージを復元するのに役立つため、それらすべてが同じvisibility_timeout値で構成されていることを確認する必要があります。

よくある間違いは、Flower モニターを次のように開始することです。

celery flower -b redis://somewhere

このような代わりに:

celery -A proj flower

前者は、花のインスタンスがセロリ構成で構成されずBROKER_TRANSPORT_OPTIONSvisibility_timeout設定が欠落していることを意味します。

これに加えて、以下の元の返信で説明されているように、壁の時計が ntp を使用して同期していることも確認する必要があります。

  • kombu は、Celery が使用するメッセージング ライブラリです。

元の返信:

このようなことは聞いたことがありませんが、バグである可能性があります。kombu/transport/redis.pyvisibility_timeout が正しく設定されているかどうかを確認するためにいくつかの print ステートメントを追加しました。ただし、1 時間以上の値で動作することをテストするには、さらに時間がかかります (正確には約 2 時間)。

それまでの間、print ステートメントを自分で追加することで (たとえば、redis トランスポートの restore_visible メソッドに)、visiblity_timeout を正しく設定していることを確認できます。

この機能はタイムスタンプを使用しているため、複数のマシンを使用している場合は、クロックがほぼ同期していることが重要です (特に、数時間ずれることがないようにしてください)。ネットワーク サーバーでは常に ntp を使用し、定期的に同期する必要があります。

于 2012-10-02T12:25:35.433 に答える