gunicorn workers 区别(sync/eventlet/gevent/thread/tornado)

本文详细介绍了Gunicorn的几种worker类型,包括Eventlet、Gevent、Thread和Tornado的工作原理和区别。Eventlet和Gevent都是基于协程的并发模型,通过替换IO模块实现非阻塞IO,而Thread使用线程池处理请求。Tornado则是通过启动一个Tornado服务实例来处理请求。文章还提到了它们各自的优缺点和适用场景。
摘要由CSDN通过智能技术生成

gunicorn workers 区别

以后都在 github 更新,请戳 gunicorn workers 区别

我们在 第一篇 里已经了解过 gunicorn 的 SyncWorker 原理, 现在我们来看下其他的 workers 是如何工作的

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),
    
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:这个错误提示"-bash: /usr/bin/yum: /usr/bin/python: bad interpreter: No such file or directory"通常是由于系统找不到Python的路径导致的。可能是由于多个Python版本导致的问题。你可以使用"whereis python"命令来查找Python的路径。\[1\] 引用\[2\]:这个错误提示"-bash: /recorddata/rebuydata/hppy/soft/python3/bin/pip3: /usr/local/source/hppy/soft/python3/bin/python3.6: bad interpreter: 没有那个文件或目录"通常是由于找不到Python解释器的路径导致的。你可以尝试检查路径是否正确,并确保Python解释器存在。\[2\] 引用\[3\]:这个错误提示"-bash: ./scripts/mysql_install_db: /usr/bin/perl: bad interpreter: No such file or directory"通常是由于找不到Perl解释器的路径导致的。你可以尝试安装Perl和Perl-devel来解决这个问题。可以执行"yum -y install perl perl-devel"命令来安装。\[3\] 问题: "-bash: /root/myweb/bin/gunicorn: /root/.venv/myweb/bin/python: bad interpreter: No such file or directory"这个错误是什么原因导致的?如何解决? 回答: 这个错误通常是由于找不到Python解释器的路径导致的。你可以尝试检查路径是否正确,并确保Python解释器存在。可能是由于虚拟环境中的Python解释器路径不正确导致的。你可以尝试重新设置虚拟环境或者更新Python解释器的路径来解决这个问题。 #### 引用[.reference_title] - *1* *3* [-bash: /usr/local/mysql/scripts/mysql_install_db: /usr/bin/perl: bad interpreter: No such file or ...](https://blog.csdn.net/weixin_39952190/article/details/113350725)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【python】-bash: /usr/local/bin/pip: /usr/bin/python: bad interpreter: No such file or directory的...](https://blog.csdn.net/qq_38486203/article/details/115527809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值