Apache + mod_wsgi가 포함된 Flask 앱의 gevent가 NotImplementedError를 발생시키는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com//questions/9692089

문제

Apache(mod_wsgi)를 사용하여 Flask 앱을 배포하는 데 문제가 있습니다. 공유 호스팅 (Webfaction)의 gevent.

응용 프로그램은 Flask에서 제공하는 개발 서버에서 잘 작동하지만 배포하려고하면 로그 파일에 다음 오류가 발생합니다.

[Tue Mar 13 15:48:24 2012] [error] Traceback (most recent call last):
[Tue Mar 13 15:48:24 2012] [error]   File "evdns.pxi", line 78, in gevent.core.__evdns_callback (gevent/core.c:6300)
[Tue Mar 13 15:48:24 2012] [error]   File "/home/username/.virtualenvs/staging/lib/python2.7/site-packages/gevent/hub.py", line 297, in switch_args
[Tue Mar 13 15:48:24 2012] [error]   File "/home/username/.virtualenvs/staging/lib/python2.7/site-packages/gevent/hub.py", line 290, in switch
[Tue Mar 13 15:48:24 2012] [error]   File "/home/username/.virtualenvs/staging/lib/python2.7/site-packages/gevent/hub.py", line 135, in get_hub
[Tue Mar 13 15:48:24 2012] [error] NotImplementedError: gevent is only usable from a single thread

나는 gevent를 사용하고 있기 때문에 gevent가 필요합니다. python-requests의 비동기 모듈 받는 사람 동시 HTTP 요청을 수행합니다.Google에서 검색해 보았으나 내가 찾은 유일한 조언은 전화하라는 것이었습니다.

from gevent import monkey
monkey.patch_all()

내 코드에서 이미 수행하고 있는 작업입니다.

의 가치 WSGIDaemonProcess 이다:

WSGIDaemonProcess myapp processes=5 python-path=/home/myusername/webapps/myapp/lib/python2.7 threads=1

여기 내 httpd.conf가 있습니다: http://pastebin.com/eWygicJH

이 문제를 해결하기 위한 조언이 있는 사람이 있나요?

도움이 되었습니까?

해결책

나는 그 솔루션을 자신을 발견 한 것처럼 보입니다.다음 지침은 나의 문제를 해결했습니다 :

WSGIApplicationGroup %{GLOBAL}
.

아이디어는 다른 답변 wsgipplicationgroup을 전역으로 설정하여 WSGI 프로세스의 문제를 해결할 수 있도록 제안됩니다.계속해서 충돌합니다. WSGI 문서에서 :

특정 WSGI 응용 프로그램을 매우 먼저 실행하도록 강제합니다. 파이썬이 초기화되면 생성 된 Python 하위 인터프리터가 생성됩니다. WSGiaPlicationGroup 지시문을 사용해야하며 그룹이 '% {전역}'.

이 지시문이 왜 문제를 해결하는 이유를 완전히 이해할 수는 없습니다.누군가가 평범한 영어로 이것을 설명 할 수 있다면 나는 행복 할 것입니다. -)

다른 팁

교체해 보세요 monkey.patch_all() ~와 함께 monkey.patch_all(thread=False).패치 시 문제를 일으키는 것이 실제로 스레딩 모듈이라면 이 방법으로 문제가 해결될 것입니다. request 스레딩을 사용하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top