2012-02-08 11 views
2

私は現在、メールを送信するなどの非同期タスクを実行するために、バックスラッシュ セールを使用しているシステムを設定しています。 ソーシャルデータの取得、クロールなど。すべてがうまくいっていますが、私は システムを監視する方法を把握しているグループ(キューアップメッセージの番号 )を持っています。 まず第一に、ここに私の構成は以下のとおりです:私は私がここで私の質問を投稿すると考えましたセロリのソースを見たが 開始Celery&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 

私がやろうとしていますまず最初にどのように多くのモニターでありますメッセージは キューにあります。バックグラウンドでは、バックグラウンドでは がリストからプッシュ/ポップしていますが、私はそのコードを に見つけることはできません。だから私は約100のタスクを開始し、 を見つけようとしているシミュレーションを模擬します: 私のcelerydは次のように実行しています: python manage.py celeryd -c 4 --loglevel = DEBUG -n XXXXX --logfile = logs/ celery.log 私は一度に4人の同時作業者しかいないはずです..... 2つのことを私は理解できません: 問題1: 私は100のタスクをキューに入れ、redis 、私は唯一の は、以下を参照してください。

$ 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つの同時タスクをサポートしているのでechnically、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 

)でなければなりません。

答えて

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()は、 が評価済みであることを除いて、 APIとAsyncResultの動作をエミュレートするEagerResultインスタンスを返します。

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

1

セロリを使用したことはありませんが、何をしているのか把握したい場合は、redis-cliを使用してRedisインスタンスに接続し、次にmonitorコマンドを実行してください。これにより、実行中のすべてのコマンドがRedisデータベースに対してダンプされます。あなたは何が起こっているかを正確に見ることができます。

関連する問題