Какие функции исправлены обезьяной с помощью gunicorn gevent worker?

Я использую gunicorn для запуска некоторых приложений flask и django, используя gevent worker, и у меня есть несколько вопросов...

Во-первых, я предполагаю, что, поскольку gunicorn разветвляется и создает экземпляры моих процессов, он будет обезьяньим патчем стандартных модулей, и мне не нужно самому вызывать monkey.patch_all, это уже сделано для меня, и каждый запрос выполняется как гринлет. правильный?

Во-вторых, и это важная часть, какие фичи на самом деле были исправлены gunicorn-gevent? когда вы используете gevent, вы всегда можете выбрать, какую функцию исправлять (socket, patch, urllib)... Итак, вопрос в том, какие из этих функций действительно запатентованы обезьяной bu gunicorn-gevent? Как я могу изменить этот список?

Например, стандартный вызов monkey.patch_all() не исправляет urllib? Как я мог знать, был ли он исправлен или нет? и как заставить gunicorn-gevent его пропатчить?

Спасибо

Джо


person Joseph    schedule 17.08.2012    source источник


Ответы (2)


Похоже, рабочий процесс gevent вызывает monkey.patch_all() при инициализации.

https://github.com/benoitc/gunicorn/blob/master/gunicorn/workers/ggevent.py#L45

Вы по-прежнему можете вызывать свой собственный код инициализации при загрузке приложения.

С колбой я использую пастер Gunicorn.

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
person gwik    schedule 17.08.2012
comment
Привет, спасибо за совет, он вызывает patch_all(), который по умолчанию не исправляет urllib, так как я могу исправить его при инициализации? и есть ли способ определить, что исправлено, а что нет? Благодарность - person Joseph; 18.08.2012
comment
Не совсем, но последующее исправление обезьяны в порядке. - person gwik; 18.08.2012
comment
окей, вопрос не по теме: зачем гуникорн пастер? каковы его преимущества? Благодарность - person Joseph; 19.08.2012
comment
Что ж, вкус есть, в последнее время многие сервера используют PasteDeploy. - person gwik; 19.08.2012

Я ответил на аналогичный вопрос, который может решить ваши проблемы.
См. этот вопрос: Нужен ли вызов monkey.patch_all() в структуре Django+Gunicorn+GEvent+Boto?

Во-первых, пушкарог по умолчанию использует SyncWorkers, и если вы не измените конфигурацию, сервер не будет использовать гринлеты. И даже несмотря на то, что вы все исправляете обезьяны, я думаю, что это не очень поможет, потому что gunicorn обрабатывает один запрос за раз по умолчанию.

Во-вторых, взгляните на исходный код GeventWorker и это на самом деле мартышкин патч всех.

person flyer    schedule 07.12.2013
comment
Он говорит выше в первом предложении, что использует тип gevent worker, а затем вы просто повторили в точности то, что было сказано в первом ответе. - person dave4jr; 25.06.2018