2013-02-19 3 views
0

파이썬의 concurrent.futures 모듈 (모듈 버전 2.1.3, Python 버전 2.7.3)을 사용하고 있습니다. 나는 다음과 같은 uwsgi 설정 (note enable-threads는 true이므로 GIL에 액세스 할 수 있고 게으른 것은 true)과 함께 4 개의 작업자 프로세스와 4 개의 uWSGI를 (ubuntu에서 정확하게) 실행중인 데몬으로 실행합니다.uWSGI : 파이썬의 concurrent.futures가 하나의 uWSGI 프로세스를 제외하고 모두 응답하지 않음

virtualenv=[ path to venv ] 
chdir=[ path to python project ] 
enable-threads=true 
lazy=true 
buffer-size=32768 
post-buffering=true 
processes=4 
master=true 
module=[ my app ].wsgi 
callable=wsgi_app 
logto=/var/log/uwsgi.log 
pidfile=[ replaced ] 
plugins=python27 
socket=[ replaced, but works fine ] 

전체 응용 프로그램이 제대로 작동하지만 선물 풀에서 일부 누락 된 컨텍스트를 사용할 수없는 것 같습니다. future()없이 somefunc()를 호출하면 모두 정상적으로 작동하지만 future()와 somefunc , HTTP 요청 (나는 Flask를 사용하고있다)은 실패하기 전에 꽤 오래 걸린다.

로그 파일에 대한 항목 만

는 HTTP 요청과 관련, 일반 WSGI 시작 물건처럼 :

WSGI application 0 (mountpoint='') ready on interpreter 0x11820a0 pid: 26980 (default app) 

가 어떻게 선물 실행에 약간의 가시성을 얻을, 또는 상황이되지 않을 수도 있습니다 알아낼 수 있습니다 선물 풀에서 사용할 수 있습니까?

의미가 있습니까?

미리 감사드립니다.

답변

2

대신 스레드의 ProcessPoolExecutor를 사용하는 경우, 그렇지 않으면 클라이언트/웹 서버와의 연결 소켓이 포크()

+0

감사를 한 후에 상속됩니다, 당신 uWSGI 옵션에 근접에-간부를 추가해야합니다, 그건입니다 대단한 제안이지만, 나는 운이 없다. 나는 추가했다 : close-on-exec = true ... 내 uWSGI 설정 및 nginx 및 uWSGI 다시 시작. 문제가 해결 될 수있는 이유를 알 수 있지만 여전히 시간 초과가 발생합니다. – Zach

+0

사실, 아마도 나는 이해하지 못할 수도 있습니다. 명확히하기 위해 기본적으로 미래를 창출하는 프로세스는 기본적으로 스폰자가 열어 놓은 파일 설명자를 상속받습니다. 왜 이것이 시간 초과를 유발합니까? – Zach

+0

파일 설명자를 상속 할 때 두 개의 참조가 있으므로 작업자가 연결을 닫으면 소켓은 열린 상태로 유지됩니다. – roberto