2012-02-14 3 views
10

수천 개의 TCP/UDP 요청을 만드는 Django 관리 명령이 있습니다. 나는 코 루틴으로 작동하도록 코드를 재구성 한 것처럼 이것을 가속화하기 위해 Gevent를 사용했습니다. 소켓 연결은 더 이상 차단되지 않지만 내가 읽은 것에서 장고는 여전히 녹색이 아닙니다. (초록색으로 말하자면, 초소를 사용하는 것을 의미합니다.)Django가 녹색으로 변합니다.

장고의 어떤 부분이 초록색이 아니며 내가 초록색으로 만들 수 있는지 알려주시겠습니까? 내가 생각하는 블록과 관련된 DB가 있습니다. Django를위한 녹색 라이브러리가 있습니까?

요청/응답주기가 초록색인지 아닌지에 대해 걱정하지 않으므로 Gunicorn이 도와 주겠습니까?

감사

답변

10

gevent 원숭이 패쳐는 표준 라이브러리 패치 것은 쉬운 Greenlet합니다. 이것은 일반적인 Django 호출이 많이 필요합니다.

from gevent import monkey; monkey.patch_all() 

데이터베이스와 관련하여 일반적으로 인터페이스가 차단됩니다. PostgreSQL을 사용하는 경우 geock과 협력하기 위해 psycopg2 원숭이 패치에 psyco_gevent을 조사하십시오.

2

gevent는 C 확장을 사용하거나 C 확장을 사용하는 다른 타사 라이브러리를 사용하는 경우 타사 라이브러리가 녹색이 아니게됩니다. 표준 라이브러리를 사용하면 gevent가 원숭이 패치를 적용 할 수 있습니다.

일부 데이터베이스 드라이버는 당연히 데이터베이스 구현 자체에 의존합니다. 녹색 라이브러리를 사용한다고해서 데이터베이스가 "녹색"으로 작동한다는 의미는 아닙니다. 이것은 또한 데이터베이스 레벨 자체에서 호출되어야합니다. 예를 들어 Prosgresql은 버전 2.2부터 비동기 명령 처리를 지원합니다.

Projects using gevent을 확인할 수도 있습니다.

적어도 응용 프로그램을 배포하기 시작할 때 Gunicorn을 사용하면 훨씬 쉬워집니다. 또한 개발 중에는 일반적인 django runserver 명령에 비해 geicorn (gevent 포함)을 권장합니다. 이는 동시 요청 방법을보다 빠르게 처리 할 수 ​​있기 때문입니다.