Какие функции исправлены обезьяной 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 и это на самом деле обезьяна патч все.