我经历了芹菜工人过程之间的一种奇怪的互动,我认为这是独立的。你能提出一个可能的原因吗?
我有一个芹菜工人,有多个工序:
PPID PID
5892 5919 \_ /bin/bash -c sleep 10 && python manage.py makemigrations --noinput; python manage.py migrate --noinput; python manage.py initservice; celery -B -A workflows --workdir=/srv/workflows -l info --autoscale=2,30 -n UNIVERSE_NODE -Q workflows worker
5919 6168 \_ /usr/bin/python /usr/local/bin/celery -B -A workflows --workdir=/srv/workflows -l info --autoscale=2,30 -n UNIVERSE_NODE -Q workflows worker
6168 6180 \_ /usr/bin/python /usr/local/bin/celery -B -A workflows --workdir=/srv/workflows -l info --autoscale=2,30 -n UNIVERSE_NODE -Q workflows worker
6168 6185 \_ /usr/bin/python /usr/local/bin/celery -B -A workflows --workdir=/srv/workflows -l info --autoscale=2,30 -n UNIVERSE_NODE -Q workflows worker
6168 6186 \_ /usr/bin/python /usr/local/bin/celery -B -A workflows --workdir=/srv/workflows -l info --autoscale=2,30 -n UNIVERSE_NODE -Q workflows worker
6168 6187 \_ /usr/bin/python /usr/local/bin/celery -B -A workflows --workdir=/srv/workflows -l info --autoscale=2,30 -n UNIVERSE_NODE -Q workflows worker
6168 6188 \_ /usr/bin/python /usr/local/bin/celery -B -A workflows --workdir=/srv/workflows -l info --autoscale=2,30 -n UNIVERSE_NODE -Q workflows worker
... ...
有时候,其中一个工作流程被卡住了.不知何故,它阻塞了所有其他工作进程。当此进程停止时,其他辅助进程将恢复执行。
根据设计,除了工作进程( PID 6168的父进程)和消息队列+结果后端之外,工作进程之间不应该存在共享状态。但不知怎么的,还是有一些。
你能提出造成这种僵局的可能原因吗?
我使用最新的芹菜3.1,RabbitMQ作为消息队列,MongoDB作为结果后端,默认早期ack和(显然,多处理模式的并发)。
发布于 2017-02-22 09:48:11
发现了这种行为的原因:http://docs.celeryproject.org/en/latest/whatsnew-3.1.html#caveats。对于长期运行的进程,预取策略可能会使一个进程阻塞其他进程。
若要防止这种情况,请使用-Ofair
标志:
$ celery -A proj worker -l info -Ofair
https://stackoverflow.com/questions/40085929
复制