해결된 질문
작성
·
74
·
수정됨
0
안녕하세요. 본 강의를 통해 celery 를 처음 접하는 초보 입니다.
섹션2 의 Task Routing 에 대해 알아보기 강의를 보고 질문드립니다.
standalone_celery 에만 작성된 mul
이나 xsum
함수(<- 이렇게 부르는 게 맞나요?)는 어떻게 실행하나요?
현재 상태에서는 실행할 수 없는 게 맞나요?
django-app 에서는 해당 함수들이 ImportError
가 발생하고(실제 해당 함수가 없을 테니 여기까진 이해했습니다.)
celery-standalone 에 들어가 python shell 에서 mul.delay(1,1)
을 실행하면
어디에도 queue2 로 task 가 실행된 로그가 뜨지 않습니다.
궁금합니다.
P.S 'Celery 의 task 에 작성된 함수들이 queue 로 실행된다.' 가 맞는 표현인가요? 틀린 표현이라면 더 적합한 표현을 알고 싶습니다.
답변 2
1
안녕하세요 jh1one님,
좋은 질문입니다. standalone_celery
에 작성된 task를 실행하려면 해당 Docker 컨테이너 내부(standalone_celery
)에서 실행해야 합니다. Django는 기본적으로 PYTHONPATH
를 자동으로 설정해 주기 때문에 Python REPL에서 바로 import
할 수 있지만, standalone_celery에서는 강의에서 설명한 대로 다소 어려울 수 있습니다. 그러나 PYTHONPATH
를 적절히 설정하면 Python REPL
에서도 동일하게 실행할 수 있습니다.
그리고 standalone_celery
에 main.py 보시면 어떤 Task가 어디 Queue에 할당되어 있는지 나와있을 겁니다.
제 팁으로는 조금 강의 더 들으시다가 Flower API를 사용하시는게 더 쉬우실 겁니다 😄
마지막으로 Celery 의 task 에 작성된 함수들이 queue 로 실행된다
은 거의 맞는 말입니다.
밑에 AI인턴이 설명한대로, Queue에 Task가 설정되고, 그 Queue를 듣고 있는 Celery worker가 Task를 처리합니다.
1
안녕하세요, jh1one님. 인프런 AI 인턴입니다.
Celery에서 standalone으로 작성된 task들을 호출하는 방법에 대해 질문해 주셨네요. standalone Celery로 작성된 mul
또는 xsum
과 같은 함수는 standalone 환경에서만 정의되어 있기 때문에, 이러한 task는 동일한 환경 내에서 호출되어야 실행됩니다.
ImportError 문제: Django 애플리케이션에서 standalone Celery task를 호출하려고 하면, 해당 task가 존재하지 않아 ImportError가 발생할 수 있습니다. 이를 해결하려면 Django 설정에 Celery task의 경로를 포함시켜야 하며, standalone 환경에서도 접근할 수 있도록 설정을 조정해야 합니다.
Queue 및 Task 실행: standalone 환경에서 task를 실행할 때, Python shell을 통해 예를 들어 mul.delay(1,1)
명령을 실행하더라도, 해당 task가 등록된 worker가 실행 중이어야 로그가 생성됩니다. 로그가 보이지 않는 경우, worker가 해당 queue를 감시하고 있는지 확인해보세요.
표현에 대한 정확성: “Celery의 task에 작성된 함수들이 queue로 실행된다”는 표현은 적절합니다. Celery는 task를 queue에 넣고, 이 queue는 여러분의 Celery worker가 소비해서 실행하게 됩니다.
다음 URL을 통해 Task Routing 부분 보니까요를 참고하면, Celery의 큐와 worker 관계에 대한 좀 더 깊이 있는 설명을 얻을 수 있습니다.
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
감사합니다, 강사님.
제가 말씀해주신 PYTHONPATH 설정 부분은 아직 이해를 못해서 알려주신 대로 강의 좀 더 듣다가 Flower API 를 사용하여 재시도 해보겠습니다~