Какие функции исправлены обезьяной gunicorn gevent worker?
Я использую gunicorn для запуска некоторых приложений flask и django, используя gevent worker, и у меня есть некоторые вопросы...
во-первых, я предполагаю, что, поскольку gunicorn fork и инстанцирует мои процессы, он будет исправлять стандартные модули, и мне не нужно вызывать обезьяну.patch_all себя, это уже сделано для меня, и каждый запрос работает как greenlet, это правильно?
во-вторых, и это важная часть, которая featues действительно получил обезьяны исправлены по gunicorn-gevent? когда вы используете gevent, вы всегда можете выбрать, какую функцию исправить (сокет, патч, urllib)... Итак, вопрос в том, какой из этих признаков действительно получил обезьяну, залатанную bu gunicorn-gevent? Как изменить этот список?
например, стандартный вызов monkey.patch_all () не исправляет urllib? Откуда мне было знать, залатана она или нет? и как заставить gunicorn-gevent залатать его?
спасибо
Джо
2 ответов
похоже, что работник gevent называет обезьяну.patch_all() при инициализации.
https://github.com/benoitc/gunicorn/blob/master/gunicorn/workers/ggevent.py#L45
вы все еще можете вызвать свой собственный код инициализации при загрузке приложения.
С колбой я использую gunicorn paster.
my_app.ini:
[app:main]
use = egg:mypackage#myapp
# app config goes here
[server:main]
use = egg:gunicorn#main
# you can put gunicorn config options here
setup.py в вашем пакете:
entry_points={
'paste.app_factory': [
'myapp = mypackage.module:app_factory'
]
пример mypackage/module.py:
def app_factory(global_config, **config):
# initialization code / gevent monkey patch goes here
# also you can assemble your wsgi stack.
# then return your flask app
return app
теперь вы можете запустить его:
gunicorn_paster my_app.ini
Я ответил на простой вопрос, и это может решить ваши проблемы.
Обратитесь к этому вопросу: мне нужно позвонить обезьяне.patch_all () в структуре Django+Gunicorn+GEvent+Boto?
во-первых, использование gunicorn SyncWorkers по умолчанию, и если вы не измените конфигурацию, сервер не будет использовать greenlets. И хотя вы обезьяна патч все, я думаю, что это не имеет большой помощи, потому что gunicorn обрабатывает один запрос за раз, как по умолчанию.
во-вторых, взгляните на исходный код GeventWorker и это на самом деле обезьяна патч все.