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

2024-06-06 23:21:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用gunicorn运行一些flask和django应用程序,使用gevent工作程序,并有一些问题。。。

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

第二,这是很重要的一部分,哪些特技真的能让猴子得到枪角的修补? 使用gevent时,始终可以选择要修补的功能(socket、patch、urllib)。。。 所以,问题是,这些特写中的哪一个真的是用猴子补的布-古尼孔-格文特? 我怎样才能更改此列表?

例如,对monkey.patch_all()的标准调用不修补urllib? 我怎么知道是不是补好了?如何强迫gunicorn gevent修补?

谢谢


Tags: 模块django实例程序应用程序flask标准进程
2条回答

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

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

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

在烧瓶里我用的是古尼康粉笔。

我的应用程序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

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

首先,gunicorn使用SyncWorkers作为默认值,如果不更改配置,那么服务器将不使用greenlet。即使你把所有东西都修补好了,我认为它也没有多大帮助,因为gunicorn一次处理一个请求是默认的。

其次,看一下GeventWorker的源代码,它实际上是对所有内容进行了修补。

相关问题 更多 >