2012-08-31 3 views

답변

27

내 settings.py 파일에서 동시성을 1로 설정하고 max_tasks_per_child를 1로 설정하고 동시에 3 개의 작업을 실행했습니다. 그것은 단지 하나의 프로세스를 사용자로 생성하고 다른 2는 셀러리로 생성합니다. 그것은 단지 하나의 프로세스를 실행 한 다음 다른 프로세스를 실행하기 전에 완료 될 때까지 기다려야합니다.

나는 장고 셀러리를 사용하고 있습니다.

편집 {

나는 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

나는 3 개의 프로세스 만 시도했다. 나는 한계를 모른다. 주된 것은 동시성이 1이면 왜 후속 작업이 실행 중인지입니다. 그들은 보류 상태에 있어야합니다. – fatrock92

+0

와우! '/ etc/default/celeryd'를 편집하면 도움이되었습니다! 고마워요! =) –

8

셀러리 작업 --concurrency 옵션을 사용하면 큐를 처리하는 하위 프로세스 수를 지정할 수 있습니다.

+1

'CELERYD_CONCURENCY = 1'이 (가) 작동하지 않습니다. 여전히 10 개의 프로세스가 생성됩니다. 그리고 ** - 동시성 = 1 **은 같은 효과가 있습니다. –

+0

자동 크기 조절 기능을 사용하고 있습니까? – mher

+0

기본적으로 사용하는 경우 - 예. –

1

나는 FOUR 프로세스가 아닌 두가 있습니다

$ 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-config 파일

CELERYD_NODES=2 

이있다, 그러나이 명 노동자가있다. 각 작업자 스레드에는 두 개의 프로세스가있는 것처럼 보입니다. 따라서 CELERYD_NODES를 3으로 설정하면 3 명의 직원을 얻으 려하지만 6 개의 프로세스를 얻게됩니다.

+2

나를 위해이 옵션을 무시합니다. CELERYD_NODES = 1이면 10 개의 프로세스가 생성됩니다. CELERYD_NODES = 2는 10 개의 프로세스를 생성합니다. –