Windows(Win2008 Server R2、IIS 7.5、MS SQL)でDjangoをセットアップしました。私はタスク処理と非常にイライラの問題に実行するためにセロリ2.4.1(RabbitMQと)を実装しようとしている。WorkerLostError、Python.exe Windows下でdjango/celeryを使用したAPPCRASH
私が推奨してcelerydを起動します。
manage.py celeryd --settings=settings
、それはOKに実行されます。
@task
def add(x, y):
return x + y
とそのは次のように私のviews.pyに呼ばれています:
tasks.add.delay(1,2)
その後、私のDjangoプロジェクトでは、私は(テストのために私は簡単な例を「追加」を使用しています開始するタスクをトリガ
celerydがこれを選択すると、が時々: の1)私はWindowsのダイアログ "python.exeが動作を停止しました"とそれを閉じるためのオプションが表示されます。 2)celerydが実行されているCMDに、私が得る、という閉じた後:
[date-time: ERROR/MainProcess] Task [taskUUID] raised exception: WorkerLostError('Worker exited prematurely.',)
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\celery\concurrency\processes\pool.py", line 610, in _join_exited_workers
raise WorkerLostError("Worker exited prematurely.")
WorkerLostError: Worker exited prematurely.
私はちょうど約すべてのセロリの設定を1つずついじり非常にうんざりするほど試してみた、それはおそらく(労働者に影響を与える可能性がありますCELERYD_CONCURRENCY、CELERYD_PREFETCH_MULTIPLIER、CELERYD_MAX_TASKS_PER_CHILDなど)には何も影響しません。
本当に奇妙なのは、時々、それが起こった後に(そして私はちょうどcelerydの実行を残して...それはそのプロセスを殺しません...)、私はpython.exeクラッシュし、タスクは正常に完了します。
settings.pyからマイセロリ関連の設定:
BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_USER = "guest"
BROKER_PASSWORD = "guest"
BROKER_VHOST = "/"
CELERY_IMPORTS = ("myproject.tasks",)
CELERY_RESULT_BACKEND = "database"
CELERY_SEND_EVENTS=True #same as '-E' option from cmd
私は強く(?Windowsの実装におそらく固有の)セロリのバグを疑うが、私はかなりそれを識別または提案するまだチョップを持っていません修正。
これについての調査結果はありますか?私はボルカーと同じ問題を抱えています。 – MarcosPri
WorkerLostErrorsをまだ取得していますが、回避策を見つけました。私は周りを見ていて、多数のタスク(>> numberOfWorkers *同時実行)をキューに入れた場合、最初の 'n'個のタスクは失敗します後続のタスクは成功します。だから、基本的に労働者はある種の「キック」が必要なのです。私の具体的なケースでは、2の並行性を持つ2人の作業者がいます。少なくとも8つのタスクを送信すると、やりとりを乗り越えることができます。私は、特にこの目的のために何もしない単純な "DummyTask"を設定しました。 – djangodude