플라스크 웹 앱이 있고 장시간 실행되는 일부 작업 (> 1 분)이 있습니다. 플라스크 (웹 서버 차단 등)에서 이것을 꺼내 외부 작업으로 옮기고 싶습니다. 셀러리 설정이있어서 플라스크에서 이러한 작업을 실행할 수 있습니다. 좋은.셀러리 + RabbitMQ 결과 백엔드 + 웹 소켓?
작업이 완료되었을 때 사용자에게 알리고 결과를 반환하려면 웹 소켓을 사용하고 싶습니다. 이것은 어려운 곳입니다.
내 클라이언트가 연결되어있는 실행 가능한 websocket 서버가 있습니다. 셀러리 작업을 시작할 때 클라이언트의 세션 ID를 전달하므로 결과가 나올 때 누가 속해 있는지 알 수 있습니다.
이제 이러한 작업이 완료된 시점을 확인하고 결과를보고 적절한 연결로 보내려면 websocket 서버가 필요합니다.
어떻게? 이것은 내가 완전히 잃어버린 곳입니다. celery.events.EventListener.capture
으로 샐러리 이벤트를들을 수 있지만 여러 개의 연결을 가질 수 없기 때문에이 웹 서버를 차단합니다!
차단하지 않고 셀리 이벤트를 수신 대기하려면 어떻게해야합니까?
하나의 아이디어는 웹 소켓을 통해 요청한 다음 웹 소켓 서버에서 셀러리 작업을 시작하는 것입니다. 그건 알림 문제 (그냥 셀러리 이벤트 사용) 해결할 것입니다,하지만 난 아직도 내 표준 플라스크 서버에 요청한 내 원래 질문에 대한 호기심이야.