关于python:gunicorn gevent worker修补了哪些功能?

Which features are monkey patched by gunicorn gevent worker?

我正在使用Gunicorn运行一些flask和django应用程序,使用gevent worker,并有一些问题…

首先,我假设因为gunicorn fork并实例化了我的进程,它会对标准模块进行monkey补丁,而我不必自己调用monkey.patch,它已经为我完成了,并且每个请求都以greenlet的形式运行,对吗?

第二,这是很重要的一部分,到底是哪一个专长让猴子被古尼康·格凡特修补了呢?当您使用gevent时,您总是可以选择要修补的功能(socket、patch、urllib)…所以,问题是,这些功能中的哪一个真的有猴子补丁布冈尼科恩格凡特?如何更改此列表?

例如,对monkey.patch_all()的标准调用不修补urllib?我怎么知道它是不是修补好的?如何强制Gunicorn Gevent修补?

谢谢


看起来gevent工作程序在初始化时调用monkey.patch_all()。

https://github.com/benoitc/gunicorn/blob/master/gunicorn/workers/ggevent.py_l45

当应用程序启动时,您仍然可以调用自己的初始化代码。

在烧瓶里,我用的是古尼康贴纸。

MyIAPP.II:

1
2
3
4
5
6
7
[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:

1
2
3
4
entry_points={
    'paste.app_factory': [
        'myapp = mypackage.module:app_factory'
    ]

mypackage/module.py示例:

1
2
3
4
5
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

现在您可以运行它:

1
gunicorn_paster my_app.ini


我回答了一个类似的问题,也许能解决你的问题。参考这个问题:我需要在django+gunicorn+gevent+boto结构中调用monkey.patch_all()吗?

首先,gunicorn使用syncworkers作为默认值,如果不更改配置,那么服务器就不会使用greenlet。即使你是猴子,我认为它没有太多帮助,因为Gunicorn默认每次处理一个请求。

其次,看看geventworker的源代码,它实际上是monkey-patch-all。