Он отлично работает под runserver Джанго с обезьяной пластыря:Развертывание GEvent в Django с mod_wsgi под Apache
if __name__ == "__main__":
import gevent
from gevent import monkey
monkey.patch_all()
execute_manager(settings)
Однако, в производстве мы используем Apache с mod_wsgi, и файл WSGI. Внесение вышеуказанного в файл WSGI не влияет. Кажется, что когда вызывается файл wsgi, это не как __main__
, но удаление if
также ничего не делает.
Я нашел gevent.wsgi.WSGIHandler()
и попытался заменить django.core.handlers.wsgi
с ним, но он требует request
и application
в качестве параметров, которые я не имею в моем файле WSGI.
Это то, что мой файл WSGI выглядит следующим образом:
import os,sys
import django.core.handlers.wsgi
from gevent import wsgi
sys.path.append('/app/src')
sys.path.append('/app/src/webInterface')
os.environ['DJANGO_SETTINGS_MODULE'] = 'WebInterface.settings'
#application = django.core.handlers.wsgi.WSGIHandler()
application = wsgi.WSGIHandler()
Можете ли вы рассказать о том, почему это не имеет смысла? Я подумал, что WSGIHandler() Gevent является версией родного WSGIHandler() с обезьяной. Наверное, это не так? – Goro
WSGIHandler() в gevent не имеет ничего общего с Django. Он выглядит как внутренний помощник запроса для собственного WSGI-сервера gevent. Это даже не действительное приложение WSGI, поэтому он пытается использовать его, поскольку объект приложения в WSGI-скрипте должен давать ошибку 500 при каждом запросе. –
ОК. Было бы неплохо, если бы в документации упоминалось об этом :) – Goro