2012-08-31 40 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个进程。 –