작성
·
164
·
수정됨
1
django에서 view나 api로 받은 request 정보를 celery에 넘겨 client에게 응답 처리를 하게 만들 수 있을까요?
시리얼라이저 문제로 celery에서 request를 arg로 받을 수 없는 것으로 알고 있습니다.
그래도 tcp를 이용한 전송이기 때문에 가능은 할것 같은데
어떻게 접근해야 될지 가늠이 되지 않아
혹시 비슷한 고민을 해보신 적이 있으실까 싶어 이렇게 질문을 드려봅니다.
답변 1
0
안녕하세요 bluebamus님,
저희도 비슷한 방법으로 사용은 하고 있는데, Django의 요청 객체인 request
를 Celery로 직접 넘길 수 없지만, 요청에서 필요한 데이터를 추출하여 Celery 작업에 전달하는 방식으로 문제를 해결하고 있습니다.
기본적인 방식은 다음과 같은데요?
요청 데이터 추출: 요청 객체에서 필요한 데이터를 추출하여 Celery 작업에 전달합니다.
Celery 작업 정의: 추출한 데이터를 처리하는 Celery 작업을 정의합니다.
Django 뷰/API에서 Celery 작업 호출: 요청 데이터를 Celery 작업에 전달하고 비동기 작업을 시작합니다.
클라이언트 응답 처리: Celery 작업이 완료된 후 결과를 클라이언트에게 응답으로 반환합니다
Django내에서는 delay
같은 것을 사용하셔서 Celery 작업을 시작하시고, task-result/<task_id> endpoint를 만드셔서 GET 요청을 보내 작업 결과를 조회하시면 될 듯 합니다.
도움이 되셨을까요?
polling이 방식이 아니라
client에서 sse 요청을 하면 view/api에서 응답을 하지 않고 celery에게 ip와 헤더, 세션, key 등의 정보를 넘겨 celery에서 sse 응답을 개시할 수 있을까 고민을 하고 있었습니다.
celery에서 이러한 http 응답을 직접 만드신 작업이 있으신지, 있으시다면 어떻게 하셨는지 알고 싶었습니다. ^^