我正在使用gunicorn运行一些烧瓶和django应用程序,使用gevent worker,并有一些问题......
首先,我假设因为gunicorn fork并实例化我的进程,它将修补标准模块,我不必自己调用monkey.patch_all,它已经为我完成了,每个请求都作为greenlet运行,这是对的吗?
第二,这是重要的一部分,这些特征真的被gunicorn-gevent修补了吗? 当你使用gevent时,你总是可以选择要修补的功能(socket,patch,urllib)...... 所以,问题是,这些特色中的哪一个真的被猴子修补了,那就是gunicorn-gevent? 我该如何更改此列表?
例如,对monkey.patch_all()的标准调用不会修补urllib? 我怎么知道它是否被修补了?以及如何强迫gunicorn-gevent修补它?
由于
乔
答案 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的源代码,它实际上是所有的补丁。