gunicorn workers 区别
以后都在 github 更新,请戳 gunicorn workers 区别
我们在 第一篇 里已经了解过 gunicorn 的 SyncWorker
原理, 现在我们来看下其他的 workers 是如何工作的
目录
Eventlet
如果你打开 eventlet 的官网
Eventlet 是一个 Python 网络库, 支持并发访问, 使用这个库可以在不改变代码写法的情况下更改代码的运行方式
- 它使用了 epoll/kqueue/libevent , 这样可以支持 可扩展的非阻塞式 I/O
- 协程 的支持可以让开发者像使用线程一样编写顺序性代码, 但是运行时又提供了非阻塞IO的运行方式
- 对于事件的派发/回调是集成在库中的, 开发者不需要关注这部分逻辑, 所以你可以很方便地在 Python 解释器中使用 Eventlet, 或者在一个大型应用的一个模块中使用
EventletWorker
继承自 AsyncWorker
, 它覆写了 init_process
方法和 run
方法
def patch(self):
hubs.use_hub()
eventlet.monkey_patch()
patch_sendfile()
def init_process(self):
self.patch()
super().init_process()
在从主进程 fork
之后, init_process
方法会调用 eventlet.monkey_patch()
, 这个方法会默认把下面的模块替换成 eventlet
提供的对应的模块
for name, modules_function in [
('os', _green_os_modules),
('select', _green_select_modules),
('socket', _green_socket_modules),
('thread', _green_thread_modules),
('time', _green_time_modules),