2012-08-31 39 views

回答

27

我嘗試在我的settings.py文件中將併發性設置爲1並將max_tasks_per_child設置爲1,並同時運行3個任務。它只產生1個用戶的過程,另外2個用作芹菜。它應該運行1個進程,然後等待它完成後再運行另一個進程。

我正在使用django芹菜。

EDIT {

我被settings.py文件寫入CELERYD_CONCURRENCY = 1分配的併發性。但是當我使用「tail -f /var/log/celery/w1.log」查看芹菜日誌文件時,我看到分配給併發的值爲8。這告訴我,setting.py不會改變併發性。 要解決此問題,我將以下幾行添加到「/ etc/default/celeryd」文件中。

# Extra arguments to celeryd 
CELERYD_OPTS="--concurrency=1" 

現在在隊列中的第二個任務等待,直到第一個完成。

}

+0

我同意3個過程,但對我而言,它總是產生10個過程。 –

+0

我只試過三個過程。儘管我不知道這個限制。主要的是,如果併發性爲1,爲什麼後續任務甚至在運行。他們應該暫時擱置。 – fatrock92

+0

哇!編輯'/ etc/default/celeryd'幫助了我!非常感謝你! =) –

8

芹菜工- 併發性選項允許指定處理隊列的子進程的數量。

+1

'CELERYD_CONCURENCY = 1'不工作 - 仍然產生10個進程。而** - concurrency = 1 **具有相同的效果。 –

+0

你在使用自動縮放嗎? – mher

+0

如果默認使用 - 是的。 –

1

我有這個在我的celeryd-config文件

CELERYD_NODES=2 

有四個過程,而不是兩個導致

$ ps -ef | grep "celery" | grep -v "grep" 
www-data 1783  1 0 17:50 ?  00:00:46 /usr/bin/python /opt/webapps/repo/manage.py celeryd --loglevel=INFO -n celery1.xxx-31-39-06-74-75 --logfile=/var/log/celery/1.log --pidfile=/var/run/celery/1.pid 
www-data 1791 1783 0 17:50 ?  00:00:01 /usr/bin/python /opt/webapps/repo/manage.py celeryd --loglevel=INFO -n celery1.xxx-31-39-06-74-75 --logfile=/var/log/celery/1.log --pidfile=/var/run/celery/1.pid 
www-data 1802  1 0 17:50 ?  00:00:52 /usr/bin/python /opt/webapps/repo/manage.py celeryd --loglevel=INFO -n celery2.xxx-31-39-06-74-75 --logfile=/var/log/celery/2.log --pidfile=/var/run/celery/2.pid 
www-data 1858 1802 0 17:50 ?  00:00:01 /usr/bin/python /opt/webapps/repo/manage.py celeryd --loglevel=INFO -n celery2.xxx-31-39-06-74-75 --logfile=/var/log/celery/2.log --pidfile=/var/run/celery/2.pid 

,但有兩個工人。它看起來像每個工作線程有兩個進程。所以假設你將CELERYD_NODES設置爲3,你會得到3個工人,但是有6個進程。

+2

忽略這個選項。 CELERYD_NODES = 1會導致10個進程。 CELERYD_NODES = 2會導致10個進程。 –