1

私はセロリを初めて使用し、何か間違ったことをしている可能性がありますが、セロリを正しく構成する方法を理解するためにすでに多くの時間を費やしました。

したがって、私の環境には 2 つのリモート サーバーがあります。1つはメイン(パブリックIPアドレスがあり、データベースサーバー、rabbitmqサーバー、Webアプリケーションを実行するWebサーバーなどのほとんどのものがあります)で、もう1つはセロリを使用してメインサーバーから非同期的に呼び出したい特定のタスクに使用されます。

私は、RabbitMQ をブローカーとして、また結果のバックエンドとして使用することを計画していました。Celery の設定は非常に基本的なものです。

CELERY_IMPORTS = ("main.tasks", ) 
BROKER_HOST = "Public IP of my main server" 
BROKER_PORT = 5672 
BROKER_USER = "guest" 
BROKER_PASSWORD = "guest" 
BROKER_VHOST = "/" 
CELERY_RESULT_BACKEND = "amqp" 

メインサーバーでワーカーを実行している場合、タスクは正常に実行されますが、リモートサーバーで実行している場合、いくつかのタスクしか実行されず、ワーカーがスタックしてタスクを実行できなくなります。ワーカーを再起動すると、さらにいくつかのタスクが実行され、再びスタックします。タスク内に特別なことは何もなく、2 つの数字を追加するだけのテスト タスクも試してみました。ワーカーを別の方法で実行しようとしました (デーモン化するかしないか、異なる同時実行性を設定し、celeryd_multi を使用する)、実際には何も役に立ちませんでした。

その理由は何ですか?私は何か見落としてますか?ブローカー (RabbitMQ) 以外のメイン サーバーで何かを実行する必要がありますか? それとも、セロリのバグですか?

うーん...ローカルワーカーで同じ問題を再現したばかりなので、それが何であるかはよくわかりません.N個のタスクが実行されるたびにセロリワーカーを再起動する必要がありますか?

どんな助けでも大歓迎です:)

4

2 に答える 2

1

問題が解決したかどうかはわかりませんが、同様の症状がありました。(何らかの理由で) タスク内からの print ステートメントが原因で、タスクが完了しないことが判明しました (おそらく、ある種のデッドロック状況?)。一部のタスクのみが print ステートメントを持っていたため、これらのタスクが最終的に実行されると、(同時実行オプションで設定された) ワーカーの数がすべて使い果たされ、タスクの実行が停止しました。

于 2012-08-11T07:13:10.323 に答える
0

セロリの設定を次のように設定してみてください

CELERYD_PREFETCH_MULTIPLIER = 1
CELERYD_MAX_TASKS_PER_CHILD = 1

ドキュメント

于 2019-02-12T11:02:49.963 に答える