요청이 있으면 django에서 먼저 응답을 보내고 DB를 업데이트하는 것과 같은 작업을 계속 수행 할 수 있습니까?Django - 응답을 반환 한 다음 DB를 업데이트하십시오.
성능상의 이유로입니다. 사용자가 응답을 빨리 받기를 원하지만 DB 업데이트에는 시간이 걸립니다.
감사합니다.
요청이 있으면 django에서 먼저 응답을 보내고 DB를 업데이트하는 것과 같은 작업을 계속 수행 할 수 있습니까?Django - 응답을 반환 한 다음 DB를 업데이트하십시오.
성능상의 이유로입니다. 사용자가 응답을 빨리 받기를 원하지만 DB 업데이트에는 시간이 걸립니다.
감사합니다.
후 간단한 해결책은 다음과 같습니다 당신이의 다음 일종의 이런 식으로 모든 사용자 요청을 처리하려면
import threading
def myview(request):
obj = MyObj()
threading.Thread(target=save_to_db, args=(obj,)).start()
return ...
def save_to_db(obj):
obj.save()
이, 가끔 백그라운드 작업에 대한 충분 메시지 대기열은보다 확장 가능한 솔루션이 될 것입니다.
하나의 스레드가 응답을 반환하고 두 번째 스레드가 작업을 수행하도록 다중 스레드 할 수 있습니다. 다른 대안은 메시지 서비스 (셀러리 + redis/rabbitmq 행을 따라)를 전달하여 작업을 처리하도록하는 것입니다.
현재 조사중인 것 : django channels 메시지를 대기열로 보내 DB를 업데이트하고 응답을 보낼 수 있습니다. 그런 다음 다른 직원이 그 메시지를 받고 작업을 수행합니다. 그러나 django 채널은 메시지가 손실되지 않도록 보장하지 않습니다 (최대 한 번 도착할 것임을 보장합니다). 따라서 DB 업데이트가 매우 중요한 경우 더 신뢰할 수있는 것을 찾고 싶을 수 있습니다.
정규 장고 너무 순수 장고 솔루션을 사용하여 요청 - 응답 경로를 다음과번호, 그것의 불가능이 응답을 반환 한 후 데이터베이스를 업데이트 그냥 생각 ... 아직 테스트하지 마십시오.
요구 사항에 따라 장고 채널이나 장고 셀러리와 같은 메시지 브로커 시스템을 조사하는 것이 좋습니다. 당신이 enable-threads = true
와 uwsgi 사용하는 경우
내가 이해했는지 확인하려면 뷰에서 새 스레드를 만들어야합니까? –