2011-02-10 6 views
0

Windows에서 Django 서버를 Apache/Mod_WSGI에서 실행하고 있습니다. 사용자 요청 처리의 일환으로 네트워크 I/O가 필요한 많은 작업을 수행합니다. 장고 ORM (다른 컴퓨터의 데이터베이스 서버)을 통해 쿼리를 실행합니다. 나는 또한 Django가 아닌 ODBC 쿼리를 만들고 네트워크 공유에있는 파일과 디렉토리를 읽고 다른 웹 사이트를 긁어 낸다.Django 내에서 블로킹 네트워크 호출은 모든 스레드를 차단합니까?

저는 적어도 네트워크 I/O 중 일부가 차단되고 있다고 확신합니다 (ODBC 쿼리와 웹 스크래핑을 염두에 두어야합니다). Windows의 Apache에는 다중 프로세스 모델이 아닌 스레드 처리 모델 만 있습니다.

첫 번째 질문은 : 요청에 응답하는 동안 네트워킹 네트워킹 호출을 차단하면 아파치 서버 내의 모든 스레드 또는 요청에 응답하는 스레드를 차단합니까?

두 번째 질문은 다음과 같습니다. 비 차단이라고 알려진이 네 가지 종류의 네트워크 호출 (Django ORM, ODBC, 네트워크 공유, HTTP)이 있습니까?

답변

2

간단한 대답은 아니오입니다. 다른 요청 스레드를 차단하면 안됩니다. 이것은 C 코드에 기반을두고 있습니다. 시스템 네트워크와 파일 시스템 기능을 다루는 모든 Python 코드 래퍼가이를 올바르게 수행합니다. 필요한 경우 GIL을 릴리스한다는 것을 알고 있으므로 주류 데이터베이스 어댑터에 대해서도 잘해야합니다. 블로킹의 문제는 사람들이 더 잘 알지 못하는 순진하게 작성된 제 3 자 C 확장 모듈로 인해 발생하지만 요즘은 드문 경우입니다.

관련 문제