【问题标题】:Which features are monkey patched by gunicorn gevent worker?gunicorn gevent worker 修补了哪些功能?
【发布时间】:2012-08-17 04:50:54
【问题描述】:

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

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

其次,这是重要的部分,哪些功能真的是被 gunicorn-gevent 猴子修补的? 当您使用 gevent 时,您始终可以选择要修补的功能(socket、patch、urllib)... 所以,问题是,这些功能中的哪些是真正的猴子补丁 bu gunicorn-gevent? 如何更改此列表?

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

谢谢

乔

【问题讨论】:

    标签: python gevent gunicorn


    【解决方案1】:

    看起来gevent worker在初始化时调用了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
    

    【讨论】:

    • 您好,感谢您的提示,它调用了 patch_all(),默认情况下不会修补 urllib,那么如何在初始化时对其进行修补?有没有办法确定什么是修补的,什么不是?谢谢
    • 不是真的,但是后续的猴子补丁是可以的。
    • 好的,一些题外话的问题:为什么是 gunicorn paste?它有什么好处?谢谢
    • 嗯,尝尝,最近也有很多服务器在使用PasteDeploy。
    【解决方案2】:

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

    首先,gunicorn 使用 SyncWorkers 作为默认设置,如果您不更改配置,那么服务器将不会使用 greenlets。即使你全部打补丁,我认为它也没有多大帮助,因为 gunicorn 默认一次处理一个请求。

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

    【讨论】:

    • 他在上面的第一句话中说他正在使用 gevent worker 类型,然后你只是重复了第一个答案所说的内容。
    猜你喜欢
    • 1970-01-01
    • 2012-06-17
    • 2022-12-25
    • 2012-06-14
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    相关资源
    最近更新 更多