私はセロリを初めて使用し、何か間違ったことをしている可能性がありますが、セロリを正しく構成する方法を理解するためにすでに多くの時間を費やしました。
したがって、私の環境には 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個のタスクが実行されるたびにセロリワーカーを再起動する必要がありますか?
どんな助けでも大歓迎です:)