Почему gevent в приложении Flask с Apache + mod_wsgi вызывает NotImplementedError?

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

Вопрос

У меня возникла проблема с развертыванием моего приложения Flask с помощью Apache (mod_wsgi) и gevent на общем хостинге (Webfaction).

Приложение отлично работает на сервере разработки, предоставляемом 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, потому что я использую асинхронный модуль python-запросов для выполнения одновременных 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}
.

Идея исходит из другого Ответ Где предлагается установить WSGIAPPLINGGROUP Global для решения проблемы с процессом WSGIЭто продолжается разбиться. Из документации WSGI :

Чтобы заставить определенное приложение WSGI для прогона в самом первом Python Sub переводчик, созданный, когда Python инициализирован, Следует использовать директиву WSGIAPlicationGroup, и группа, установленная на '% {Global}'.

не может полностью понять, почему эта директива решает мою проблему, но это делает.Я буду более чем счастлив, если кто-то может объяснить это мне в простом английском языке; -)

Другие советы

Попробуйте заменить monkey.patch_all() с monkey.patch_all(thread=False).Если это действительно модуль потоковой передачи, который вызывает проблему при исправлении, это должно решить ее. request не использует многопоточность.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top