2016-10-23 3 views

답변

1

후 간단한 해결책은 다음과 같습니다 당신이의 다음 일종의 이런 식으로 모든 사용자 요청을 처리하려면

import threading 

def myview(request): 
    obj = MyObj() 
    threading.Thread(target=save_to_db, args=(obj,)).start() 
    return ... 

def save_to_db(obj): 
    obj.save() 

이, 가끔 백그라운드 작업에 대한 충분 메시지 대기열은보다 확장 가능한 솔루션이 될 것입니다.

0

하나의 스레드가 응답을 반환하고 두 번째 스레드가 작업을 수행하도록 다중 스레드 할 수 있습니다. 다른 대안은 메시지 서비스 (셀러리 + redis/rabbitmq 행을 따라)를 전달하여 작업을 처리하도록하는 것입니다.

+0

내가 이해했는지 확인하려면 뷰에서 새 스레드를 만들어야합니까? –

1

현재 조사중인 것 : django channels 메시지를 대기열로 보내 DB를 업데이트하고 응답을 보낼 수 있습니다. 그런 다음 다른 직원이 그 메시지를 받고 작업을 수행합니다. 그러나 django 채널은 메시지가 손실되지 않도록 보장하지 않습니다 (최대 한 번 도착할 것임을 보장합니다). 따라서 DB 업데이트가 매우 중요한 경우 더 신뢰할 수있는 것을 찾고 싶을 수 있습니다.

정규 장고 너무 순수 장고 솔루션을 사용하여 요청 - 응답 경로를 다음과

1

번호, 그것의 불가능이 응답을 반환 한 후 데이터베이스를 업데이트 그냥 생각 ... 아직 테스트하지 마십시오.

요구 사항에 따라 장고 채널이나 장고 셀러리와 같은 메시지 브로커 시스템을 조사하는 것이 좋습니다. 당신이 enable-threads = true와 uwsgi 사용하는 경우

관련 문제