인프런 커뮤니티 질문&답변

bluebamus님의 프로필 이미지

작성한 질문수

실리콘밸리 엔지니어와 함께하는 샐러리(Celery)

Task 에러를 Signal로 해결해 보기

django에서 view나 api에서 request를 celery로 넘길 수 있을까요?

24.07.05 17:07 작성

·

102

·

수정됨

1

django에서 view나 api로 받은 request 정보를 celery에 넘겨 client에게 응답 처리를 하게 만들 수 있을까요?

시리얼라이저 문제로 celery에서 request를 arg로 받을 수 없는 것으로 알고 있습니다.

그래도 tcp를 이용한 전송이기 때문에 가능은 할것 같은데

어떻게 접근해야 될지 가늠이 되지 않아

혹시 비슷한 고민을 해보신 적이 있으실까 싶어 이렇게 질문을 드려봅니다.

답변 1

0

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

2024. 07. 06. 09:17

안녕하세요 bluebamus님,

저희도 비슷한 방법으로 사용은 하고 있는데, Django의 요청 객체인 request를 Celery로 직접 넘길 수 없지만, 요청에서 필요한 데이터를 추출하여 Celery 작업에 전달하는 방식으로 문제를 해결하고 있습니다.

기본적인 방식은 다음과 같은데요?

  • 요청 데이터 추출: 요청 객체에서 필요한 데이터를 추출하여 Celery 작업에 전달합니다.

  • Celery 작업 정의: 추출한 데이터를 처리하는 Celery 작업을 정의합니다.

  • Django 뷰/API에서 Celery 작업 호출: 요청 데이터를 Celery 작업에 전달하고 비동기 작업을 시작합니다.

  • 클라이언트 응답 처리: Celery 작업이 완료된 후 결과를 클라이언트에게 응답으로 반환합니다

Django내에서는 delay 같은 것을 사용하셔서 Celery 작업을 시작하시고, task-result/<task_id> endpoint를 만드셔서 GET 요청을 보내 작업 결과를 조회하시면 될 듯 합니다.

도움이 되셨을까요?

bluebamus님의 프로필 이미지
bluebamus
질문자

2024. 07. 06. 23:41

polling이 방식이 아니라

client에서 sse 요청을 하면 view/api에서 응답을 하지 않고 celery에게 ip와 헤더, 세션, key 등의 정보를 넘겨 celery에서 sse 응답을 개시할 수 있을까 고민을 하고 있었습니다.

celery에서 이러한 http 응답을 직접 만드신 작업이 있으신지, 있으시다면 어떻게 하셨는지 알고 싶었습니다. ^^