【发布时间】:2016-10-17 12:04:19
【问题描述】:
我在 Celery 工作进程之间体验到一种奇怪的交互,我认为它是独立的。您能提出一个可能的原因吗?
我有一个具有多个工作进程的 celery worker:
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 的父进程)和消息队列 + 结果后端。但不知何故,有一些。
您能否提出造成这种僵局的可能原因?
我使用最新的 Celery 3.1,RabbitMQ 作为消息队列,MongoDB 作为结果后端,默认的 early ack 和(显然,并发的多处理模式)。
【问题讨论】: