Celery 4.xが起動します(修正#4078を使用)が、すべてのタスクがクラッシュします
ファーストステップチュートリアルを使用する(http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html)
セロリ-タスクワーカー--loglevel = info
add.delay(2,2)
タスクが実行され、4の結果が生成されます
セロリがクラッシュします。
"C:\ Program Files \ Python36 \ Scripts \ celery.exe" -perse.celeryワーカー-linfo
-------------- celery @ PETRUS v4.0.2(latentcall)
--- * * * -Windows-10-10.0.14393-SP0 2017-06-08 15:31:22
-------------- [キュー]
。>セロリ交換=セロリ(直接)キー=セロリ
[タスク]
。 perse.tasks.celery_add
[2017-06-08 15:31:22,685:INFO / MainProcess] amqp:// guestに接続し* @ 127.0.0.1:5672 //[2017-06-08 15:31:22,703:INFO / MainProcess]混ざり合う:隣人を探しています[2017-06-08 15:31:23,202:INFO / SpawnPoolWorker-5] self.run()を呼び出す子プロセス5124[2017-06-08 15:31:23,207:INFO / SpawnPoolWorker-4] self.run()を呼び出す子プロセス10848[2017-06-08 15:31:23,208:INFO / SpawnPoolWorker-10] self.run()を呼び出す子プロセス5296[2017-06-08 15:31:23,214:INFO / SpawnPoolWorker-1] self.run()を呼び出す子プロセス5752[2017-06-08 15:31:23,218:INFO / SpawnPoolWorker-3] self.run()を呼び出す子プロセス11868[2017-06-08 15:31:23,226:INFO / SpawnPoolWorker-11] self.run()を呼び出す子プロセス9544[2017-06-08 15:31:23,227:INFO / SpawnPoolWorker-6] self.run()を呼び出す子プロセス16332[2017-06-08 15:31:23,229:INFO / SpawnPoolWorker-8] self.run()を呼び出す子プロセス3384[2017-06-08 15:31:23,234:INFO / SpawnPoolWorker-12] self.run()を呼び出す子プロセス8020[2017-06-08 15:31:23,241:INFO / SpawnPoolWorker-9] self.run()を呼び出す子プロセス15612[2017-06-08 15:31:23,243:INFO / SpawnPoolWorker-7] self.run()を呼び出す子プロセス9896[2017-06-08 15:31:23,245:INFO / SpawnPoolWorker-2] self.run()を呼び出す子プロセス260[2017-06-08 15:31:23,730:INFO / MainProcess]混ざり合う:すべて一人で[2017-06-08 15:31:23,747:INFO / MainProcess] celery @PETRUSの準備ができました。[2017-06-08 15:31:49,412:INFO / MainProcess]受信したタスク:perse.tasks.celery_add [524d788e-e024-493d-9ed9-4b009315fea3][2017-06-08 15:31:49,416:ERROR / MainProcess]タスクハンドラーでエラーが発生しました:ValueError( '解凍するのに十分な値がありません(予期された3、0を取得しました)'、)トレースバック(最後の最後の呼び出し):ワークループ内のファイル "c:\ program files \ python36 \ lib \ site-packages \ billiard \ pool.py"、行359結果=(True、prepare_result(fun( args、** kwargs)))
_fast_trace_taskのファイル "c:\ program files \ python36 \ lib \ site-packages \ celery \ app \ trace.py"、行518
タスク、受け入れ、ホスト名= _loc
ValueError:解凍するのに十分な値がありません(予想3、0を取得)
プルリクエスト#4078を参照してください
FWIWイベントレットプールの実装(「-Peventlet」コマンドラインオプション)を使用してこれを回避しました。
@drewdoggのソリューションは、チュートリアルで言及する必要があります。
確認する必要があります:このバグはに表示されます
Celery 4.1.0
Windows 10 Enterprise 64 bit
コマンドを実行するときcelery -A <mymodule> worker -l info
および次の回避策が機能します。
pip install eventlet
celery -A <mymodule> worker -l info -P eventlet
ワーカーインスタンスのFORKED_BY_MULTIPROCESSING = 1環境変数を定義するだけで十分です。
@auvipy私のために働いてくれてありがとう。
@auvipyそれは本当に問題を解決します:)👍
追加:
OSのインポート
os.environ.setdefault( 'FORKED_BY_MULTIPROCESSING'、 '1')
セロリのインスタンスを定義する前に
多分これはドキュメントで言及されるべきですか? @wonderfulsuccessはプルリクエストを送信しますか?
@wonderfulsuccess
本当にありがとう
@auvipyそれは本当に問題を解決します
追加:
OSのインポート
os.environ.setdefault( 'FORKED_BY_MULTIPROCESSING'、 '1')
セロリのインスタンスを定義する前に
動作してくれてありがとう!
@auvipyこれが修正するコードが1行しかない場合は、ドキュメントを使用してユーザーに回避策の実装を推奨するのではなく、セロリ内で修正しないのはなぜですか? このような単純な修正で完全にプラットフォームを壊すバグが、2年近く経ってもまだ問題であるのはなぜですか?
セロリはどこにこれを置くことができますか? これはWindows固有の命令に適していると思います。 コードレベルで修正したい場合は、適切なPRを用意してください。
@auvipyそれは本当に問題を解決します:)👍
追加:
OSのインポート
os.environ.setdefault( 'FORKED_BY_MULTIPROCESSING'、 '1')
セロリのインスタンスを定義する前に
あなたは素晴らしいです、トンに感謝します!
@auvipy私はこの問題への答えを探してきました、私はこれを修正しようと多くの時間を費やしました、どうもありがとうございました
最も参考になるコメント
確認する必要があります:このバグはに表示されます
コマンドを実行するとき
celery -A <mymodule> worker -l info
および次の回避策が機能します。