2013-06-12 75 views
2

您如何確保芹菜只能作爲一個流程運行?當我運行manage.py celeryd --concurrency=1然後ps aux | grep celery我看到3個正在運行的實例:Celeryd推出過多的流程

www-data 8609 0.0 0.0 20744 1572 ?  S 13:42 0:00 python manage.py celeryd --concurrency=1 
www-data 8625 0.0 1.7 325916 71372 ?  S 13:42 0:01 python manage.py celeryd --concurrency=1 
www-data 8768 0.0 1.5 401460 64024 ?  S 13:42 0:00 python manage.py celeryd --concurrency=1 

我注意到有celerybeat,它總是運行作爲2個處理類似的問題。

+0

如何/你在哪裏調用'python manager.py celeryd ...'?不知道這是否可能是問題,但如果你是django運行在apache後面,並且apache運行在多進程模式下,那麼每個apache進程可能會啓動它自己的celeryd。 – mklauber

+0

@mklauber,我使用命令'python manage.py celeryd --concurrency = 1'通過supervisord調用它。 – Cerin

+0

它看起來像有n + 1個進程,因爲Celery啓動一個主進程和幾個工作進程。因此,您預計會看到celerybeat,但隨後使用--concurrency = 1,您仍然應該看到2個工作進程,而不是3.您使用的是哪種版本的Celery? Celery 3.0.19結束了我的問題。另外,Celery會告訴你「concurrency:1(processes)」在stdout的某處嗎? –

回答

0

this鏈接..的進程數是4:一個主要過程,兩個子流程和一個celerybeat過程中, 此外,如果你正在使用FORCE_EXECV還有另一個進程開始清理信號燈。

如果用芹菜+ Django的芹菜開發和利用的RabbitMQ或Redis的作爲經紀人,那麼它不應該使用更多的 比一個額外的線程(如果沒有被CELERY_DISABLE_RATE_LIMITS設置)