2016-10-17 2 views
0

셀러리 작업자 프로세스간에 이상한 상호 작용이 발생했습니다. 가능한 이유를 제안 해 주시겠습니까?셀러리 : 한 작업자 프로세스가 다른 작업자 프로세스의 실행을 차단합니까? 무엇을 공유 했습니까?

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과 (분명히 동시 처리의 다중 처리 모드).

답변

0

이 동작의 이유를 찾았습니다. http://docs.celeryproject.org/en/latest/whatsnew-3.1.html#caveats. 장기 실행 프로세스의 경우 프리 페치 정책은 한 프로세스를 다른 프로세스로 차단할 수 있습니다.

것은,이 문제를 방지 -Ofair 플래그 사용하려면

$ celery -A proj worker -l info -Ofair

관련 문제