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。