Celeryを使用して複数のワーカーを実行する


11

Rabbitmqから読み取り、単一のシステムでCeleryを使用してタスクを並行して実行する必要があります。

[2014-12-30 15:54:22,374: INFO/Worker-1] ...   
[2014-12-30 15:54:23,401: INFO/Worker-1] ...
[2014-12-30 15:54:30,878: INFO/Worker-1] ...
[2014-12-30 15:54:32,209: INFO/Worker-1] ...
[2014-12-30 15:54:33,255: INFO/Worker-1] ...
[2014-12-30 15:54:48,445: INFO/Worker-1] ...
[2014-12-30 15:54:49,811: INFO/Worker-1] ...
[2014-12-30 15:54:50,903: INFO/Worker-1] ...
[2014-12-30 15:55:39,674: INFO/Worker-1] ...
[2014-12-30 15:55:41,024: INFO/Worker-1] ...
[2014-12-30 15:55:42,147: INFO/Worker-1] ...

常に1人のワーカーだけが常時実行されています。つまり、順番に次々と実行されます。複数のワーカーを実行して並列実行するようにCeleryを構成するにはどうすればよいですか?

回答:


17

スレッドではなく子プロセスを生成するワーカーに関するMartinPからのコメントに続いて、私の回答を更新しました。

セロリworkerworker processesは別物です(参考のためにこれをお読みください)。

ワーカーが開始されると、特定の数の子プロセスが生成されます。

これらのプロセスのデフォルトの数は、そのマシンのコアの数と同じです。

Linuxでは、次の方法でコアの数を確認できます。

$ nproc --all

それ以外の場合は、次のように自分で指定できます。

$ celery -A proj worker --loglevel=INFO --concurrency=2

上記の例では、2つの子プロセスを生成できるワーカーが1人います。通常、マシンごとに1つのワーカーを実行することをお勧めします。同時実行値は、並行して実行するプロセスの数を定義しますが、複数のワーカーを実行する必要がある場合は、以下に示すように開始できます。

$ celery -A proj worker -l info --concurrency=4 -n wkr1@hostname
$ celery -A proj worker -l info --concurrency=2 -n wkr2@hostname
$ celery -A proj worker -l info --concurrency=2 -n wkr3@hostname

詳細についてはセロリのドキュメントを参照してください


3
並行性パラメーターはスレッドを実行しません。それは、並列にタスクを処理するように、それは、デフォルトでは子プロセスを実行します- docs.celeryproject.org/en/latest/reference/...
MartinP

並行性とスレッドはどのように相互に関連していますか。デフォルトの並行性がマシンのコアの数である場合、スレッドの数はどうなりますか?構成可能ですか?
トーマスジョン

@ThomasJohn私はスレッドのデフォルトの数はまだマシンのコアの数だと思います。通常、スレッドベースのワーカーには--concurrencyフラグを高く設定します。
FragLegs

0

私はこれを見つけました

http://docs.celeryproject.org/en/latest/reference/celery.html?highlight=parallel

そこでCanvasプリミティブを探し、並列実行するグ​​ループを作成する方法を確認できます。

クラスcelery.group(task1 [、task2 [、task3 [、…taskN]]])並行して実行されるタスクのグループを作成します。

それ以外の場合は、IRCチャネルにアクセスして特別な質問をするのが良い方法です。通常、それが非常に良いことを知っている人がいて、彼らはあなたを助けることができます。


0

ワーカーが単一のプロセス/スレッドを実行しているようです。おそらく、ワーカーを起動して複数の(並列)ワーカーインスタンスを生成するときに--concurrencyor -c引数を追加する必要があるだけです。

celery -A proj worker -c 4
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.