celery 돌릴 때 nohup으로 지정해놓은 log파일에서 확인
celery 수행이 오래 걸리는게 아니었음
task 1, 2 둘 다 1초마다 실행
task 1 : sleep 10초 걸리는 task
task 2 : 바로 실행하는 task
결과 1(Worker 1개)
Queue 개수와 상관 없었음
# Queue 1개에서 task 1,2 돌릴 경우
# task 2 : 0.04초
[2021-04-22 13:39:37,801: INFO/ForkPoolWorker-6] Task aip.celery.test2[a026866c-ebc8-40e8-ae13-8bd6bcdd2018] succeeded in 0.043861500000275555s: 'task2'
[2021-04-22 13:39:37,859: INFO/ForkPoolWorker-8] Task aip.celery.test2[75f2b9cb-4a82-476f-abf4-c1634312a7f0] succeeded in 0.04921889999968698s: 'task2'
# task 1,2 각각 다른 Queue에서 실행할 경우
# task 2 : 0.04초
[2021-04-22 13:42:33,268: INFO/ForkPoolWorker-2] Task aip.celery.test2[a84cbc5e-9647-429b-be90-92651fe81e38] succeeded in 0.04919719999998051s: 'task2'
[2021-04-22 13:42:33,276: INFO/ForkPoolWorker-3] Task aip.celery.test2[466c7271-a067-40bb-a0c4-16c23dbc5898] succeeded in 0.04812519999904907s: 'task2'
수행 시간이 오래 걸리는 것보다 응답 올때까지 대기타는 게 문제임
그런데 보이는 것만 그렇게 보이는 게 아닐까? 라고도 생각해봤지만 실제로 result를 저장시키고 있는 DB를 보니 보이는 것과 똑같이 pending현상 있었음
혹시 결과 저장하는 것때문에 pending 현상이 있나? 싶어서 CELERY_RESULT_BACKEND도 없애고 아래와 같이 설정했는데 똑같음
@app.task
def test1(ignore_result=True):
결과 2(Worker 2개)
celery multi start 2 -A aip worker -Q:1 task1, -Q:2 task2 --loglevel=info -n backend@%n >
원인은 같은 queue에 있는 task가 오래 걸릴 경우, 뒤에 있는 task들이 모두 대기해야 함
nohup watchmedo auto-restart -- celery -A aip worker -Q low_priority --loglevel=info -n low_priority@%n > /var/log/celery_worker.log &
nohup watchmedo auto-restart -- celery -A aip worker -Q middle_priority --loglevel=info -n middle_priority@%n > /var/log/celery_worker.log &
nohup watchmedo auto-restart -- celery -A aip worker -Q high_priority --loglevel=info -n high_priority@%n > /var/log/celery_worker.log &
CELERY_IGNORE_RESULT = True
21-05-24 기준 같은 queue에 있는 task가 오래 걸릴 경우, 뒤에 있는 task들이 모두 대기해야 하는 문제가 아닌, 남아있는 worker가 없을 경우 대기하는 것임