web-dev-qa-db-ja.com

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

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を構成するにはどうすればよいですか?

11
SrC

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

セロリworkerおよびworker 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

詳細はセロリ docs を参照してください

17
elnurcoot

私はこれを見つけました

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

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

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

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

0
René Höhle

ワーカーが単一のプロセス/スレッドを実行しているようです。おそらく --concurrencyまたは-c引数 ワーカーを開始して複数の(並列)ワーカーインスタンスを生成する場合。

celery -A proj worker -c 4
0
Jamie B