2

私は現在、セロリとredisバックエンドを使用して、電子メールの送信、ソーシャルデータのプル、クロールなどの一連の非同期タスクを実行するシステムをセットアップしています。すべてがうまく機能していますが、システムを監視する方法 (つまり、キューに入れられたメッセージの数) をグループで考えています。私はセロリのソースを調べ始めましたが、ここに質問を投稿することにしました: まず、ここに私の設定があります:

BROKER_BACKEND                  = "redis" 
BROKER_HOST                     = "localhost" 
BROKER_PORT                     = 6379 
BROKER_VHOST                    = "1" 
REDIS_CONNECT_RETRY     = True 
REDIS_HOST                              = "localhost" 
REDIS_PORT                              = 6379 
REDIS_DB                                = "0" 
CELERY_SEND_EVENTS                      = True 
CELERYD_LOG_LEVEL               = 'INFO' 
CELERY_RESULT_BACKEND           = "redis" 
CELERY_TASK_RESULT_EXPIRES      = 25 
CELERYD_CONCURRENCY             = 8 
CELERYD_MAX_TASKS_PER_CHILD = 10 
CELERY_ALWAYS_EAGER                     =True

最初にやろうとしているのは、キューにあるメッセージの数を監視することです。舞台裏では、redis バックエンドがリストからプッシュ/ポップしているだけだと思いますが、コードでそれを見つけることができないようです。そこで、約 100 のタスクを開始して redis でそれらを見つけようとしているシミュレーションをモックアップします。私の celeryd は次のように実行されています。 celery.log したがって、一度に 4 つの同時ワーカーのみを使用する必要があります ..... わからないことが 2 つあります。

$ redis-cli 
redis 127.0.0.1:6379> keys * 
1) "_kombu.binding.celery" 
redis 127.0.0.1:6379> select 1 
OK 
redis 127.0.0.1:6379[1]> keys * 
1) "_kombu.binding.celery" 
2) "_kombu.binding.celeryd.pidbox" 
redis 127.0.0.1:6379[1]>

キューに入れられている数を取得するためのタスクが見つからないようです (技術的には、4 つの同時タスクしかサポートしていないため、96 にする必要があります)。

問題 2

$ ps aux | grep celeryd | cut -c 13-120 
 41258   0.2  0.2  2526232   9440 s004  S+    2:27PM   0:07.35 python 
manage.py celeryd -c 4 --loglevel=DEBU 
 41261   0.0  0.1  2458320   2468 s004  S+    2:27PM   0:00.09 python 
manage.py celeryd -c 4 --loglevel=DEBU 
 38457   0.0  0.8  2559848  34672 s004  T    12:34PM   0:18.59 python 
manage.py celeryd -c 4 --loglevel=INFO 
 38449   0.0  0.9  2517244  36752 s004  T    12:34PM   0:35.72 python 
manage.py celeryd -c 4 --loglevel=INFO 
 38443   0.0  0.2  2524136   6456 s004  T    12:34PM   0:10.15 python 
manage.py celeryd -c 4 --loglevel=INFO 
 84542   0.0  0.0  2460112      4 s000  T    27Jan12   0:00.74 python 
manage.py celeryd -c 4 --loglevel=INFO 
 84536   0.0  0.0  2506728      4 s000  T    27Jan12   0:00.51 python 
manage.py celeryd -c 4 --loglevel=INFO 
 41485   0.0  0.0  2435120    564 s000  S+    2:54PM   0:00.00 grep 
celeryd 
 41264   0.0  0.1  2458320   2480 s004  S+    2:27PM   0:00.09 python 
manage.py celeryd -c 4 --loglevel=DEBU 
 41263   0.0  0.1  2458320   2480 s004  S+    2:27PM   0:00.09 python 
manage.py celeryd -c 4 --loglevel=DEBU 
 41262   0.0  0.1  2458320   2480 s004  S+    2:27PM   0:00.09 python 
manage.py celeryd -c 4 --loglevel=DEBU 

誰かが私のためにこれを説明できれば、それは素晴らしいことです.

4

2 に答える 2

9

あなたの構成はCELERY_ALWAYS_EAGER = True. これは、タスクがローカルで実行されるため、Redis に表示されないことを意味します。ドキュメントから: http://celery.readthedocs.org/en/latest/configuration.html#celery-always-eager

CELERY_ALWAYS_EAGER

これが True の場合、タスクが戻るまでブロックすることにより、すべてのタスクがローカルで実行されます。apply_async() と Task.delay() は EagerResult インスタンスを返します。これは、結果が既に評価されていることを除いて、AsyncResult の API と動作をエミュレートします。

つまり、タスクはキューに送信される代わりにローカルで実行されます。

于 2012-02-09T02:31:50.860 に答える
1

Celery を使用したことはありませんが、Celery が何をしているのかを知りたい場合は、redis-cli を使用して Redis インスタンスに接続し、monitorコマンドを実行する方法の 1 つです。これにより、Redis データベースに対して実行されているすべてのコマンドがダンプされます。何が起こっているのかを正確に見ることができます。

于 2012-02-08T19:28:43.137 に答える