2014-07-23 3 views
0

Django 뷰에서 함수를 호출하려고하는데, 완료하는 데 2-5 분이 걸릴 수 있습니다. 비동기식으로 호출하고, 작업이 시작된 후 돌아올 계획이며, AJAX로 폴링하여 FINISHED 플래그를 기다릴 계획입니다.Django 뷰에서 비동기 적으로 함수를 호출하는 가장 좋은 방법은 무엇입니까?

Celery + RabbitMQ와 같은 무거운 솔루션을 사용하고 싶지는 않지만 간단한 비동기 호출만으로도 좋습니다.

어떻게해야합니까? 서브 프로세스, 스레딩 및 비틀린 것에 대해 읽었습니다. 어떤 장고보기에서 사용하는 가장 안전한 방법은?

답변

4

최상의 솔루션은 셀러리와 같은 별도의 작업 대기열 처리 시스템입니다. 특별히 좋은 대안은 없습니다. 이것이 작업 대기열 처리 시스템입니다. Redest 인스턴스를 백엔드로 사용하고 편리한 Django 인터페이스 인 django-rq을 가지고있는 RQ (Redis Queue)와 같은 셀러리에 대한 더 가벼운 대안이 있습니다.

임시 솔루션은 복잡하고 디버그하기 어려운 문제를 발생시키는 경향이 있으므로 전문적인 도구를 사용하여이 문제를 해결하는 것이 좋습니다.

1

Celery + Redis 또는 RabbitMQ를 사용하고 싶지 않은 경우 처리 코드로 관리 명령을 작성할 수 있습니다. 누군가가 또 다른 질문에 말했듯이보기에서, 당신은

from subprocess import Popen 
p = Popen(['manage.py', 'my_command']) 

처럼 뭔가 비동기 관리 명령을 호출 할 수 있습니다 : 당신은 여전히 ​​실행되고 있는지를 poll() 수있는 것처럼는 popen 인스턴스가 여러 가지 다른 일을 할 수있다. 당신이 얻은 popen 인스턴스가 쓰레드에 안전하거나 직렬화 가능하기를 바란다. 그래서 프로세스가 실행을 마쳤는지 알기 위해 재사용 할 수있다.

관련 문제