哪些功能是由gunicorn gevent worker修补的猴子?

时间:2012-08-17 04:50:55

标签: python gevent gunicorn

我正在使用gunicorn运行一些烧瓶和django应用程序,使用gevent worker,并有一些问题......

首先,我假设因为gunicorn fork并实例化我的进程,它将修补标准模块,我不必自己调用monkey.patch_all,它已经为我完成了,每个请求都作为greenlet运行,这是对的吗?

第二,这是重要的一部分,这些特征真的被gunicorn-gevent修补了吗? 当你使用gevent时,你总是可以选择要修补的功能(socket,patch,urllib)...... 所以,问题是,这些特色中的哪一个真的被猴子修补了,那就是gunicorn-gevent? 我该如何更改此列表?

例如,对monkey.patch_all()的标准调用不会修补urllib? 我怎么知道它是否被修补了?以及如何强迫gunicorn-gevent修补它?

由于

2 个答案:

答案 0 :(得分:7)

看起来gevent工作者在初始化时调用了monkey.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

答案 1 :(得分:1)

我已回答了一个简单的问题,这可能会解决您的问题 请参阅此问题:Do I need call monkey.patch_all() in Django+Gunicorn+GEvent+Boto structure?

首先,gunicorn默认使用 SyncWorkers ,如果不更改配置,则服务器将不使用greenlets。即使你修补了所有内容,我认为它没有多少帮助,因为gunicorn默认处理一个请求。

其次,看看GeventWorker的源代码,它实际上是所有的补丁。