2017-02-27 21 views
1

CeleryをDjango用に設定する際に問題があります。セロリで複数のプロセスを開始する

これは私がジャンゴ・セロリ起動する方法です:タスクの

python manage.py celery worker --autoscale=10,2 

例:

@task 
def test(i): 
    print "ITERATION {} START".format(i) 
    time.sleep(10) 
    print "ITERATION {} END".format(i) 
    return True 

をそして私は、このタスクを呼び出す:

for i in range(10): 
    test.delay(i) 

私が何を期待私がキューに10個のタスクを送信すると、10個のプロセスがオープンしなければならないということです。実際に何が起こる

は、プロセスの乱数は、彼らがを終了した後、これらの4つのタスクは、別の3スタートを、他の3開始とを終了し、通常は4と後、開始されていることです。これは完了までに時間がかかるタスクでも発生します。 2分。

誰かがこの現象を説明できますか?自動スケール上限で許可されている場合は、すぐにすべてのタスクを開始できますか?

また、autoscaleの下限は2ですが、サーバーの起動時に3つのプロセスが実行されます。何故ですか?

プラットフォーム:OpenWRT、デュアルコアプロセッサ、2GB RAM。

+0

セロリ環境の並行性の設定をチェックして、それがタスクを制限しているかどうかを確認したい場合があります。 – postoronnim

答えて

0

デフォルトでは、セロリはコアごとにワーカーを作成するため、4コアのマシンで実行していると仮定しています。詳細は、フラグ--concurrencydocumentationを参照して設定できます。

3つのプロセスが開始された後に2つずつ繰り返されると、タスクは別のプロセスが終了するとただ1回だけ開始され、プリフェッチポリシーのために時には遅延することもあります。詳細はthis threadをご覧ください。

セロリはメインプロセスを開始し、Xワーカーはメインプロセスがワーカーを管理し、必要に応じてそれらを再起動し、ワーカーにタスクをディスパッチします。したがって、2人の労働者がいる場合は、3つのプロセスがあります。

+0

マシンはデュアルコアです。 あなたはメインのプロセスと作業者について正しくあります。 – bmiljevic

+0

セロリはどうやって走っていますか?もっと情報を与える。オープンな質問はまだありますか?私は助けましたか? –

関連する問題