Python应用实战案例-Python协程管理精讲万字长文(建议收藏)

举报
格图洛书 发表于 2021/11/19 00:30:51 2021/11/19
【摘要】 前言 首先,本文不是带你浏览源代码,然后对照原始代码给你讲 Python 标准的实现。相反,我们会从实际问题出发,思考解决问题的方案,一步步体会解决方案的演进路径,最重要的,希望能在过程中获得知识系统性提升。 本文仅是提供了一个独立的思考方向,并未遵循历史和现有实际具体的实现细节。 其次,阅读这篇文章需要你对 Python 比较熟...

前言

首先,本文不是带你浏览源代码,然后对照原始代码给你讲 Python 标准的实现。相反,我们会从实际问题出发,思考解决问题的方案,一步步体会解决方案的演进路径,最重要的,希望能在过程中获得知识系统性提升。

本文仅是提供了一个独立的思考方向,并未遵循历史和现有实际具体的实现细节。

其次,阅读这篇文章需要你对 Python 比较熟悉,至少了解 Python 中的生成器 generator 的概念。

0x01 IO 多路复用

这是性能的关键。但我们这里只解释概念,其实现细节不是重点,这对我们理解 Python 的协程已经足够了,如已足够了解,前进到 0x02

首先,你要知道所有的网络服务程序都是一个巨大的死循环,你的业务逻辑都在这个循环的某个时刻被调用:


  
  1. def handler(request):
  2.     # 处理请求
  3.     pass
  4. # 你的 handler 运行在 while 循环中
  5. while True:
  6.     # 获取一个新请求
  7.     request = accept()
  8.     # 根据路由映射获取到用户写的业务逻辑函数
  9.     handler = get_handler(request)
  10.     # 运行用户的handler,处理请求
  11.     handler(request)

设想你的 Web 服务的某个 handler,在接收到请求后需要一个 API 调用才能响应结果。

对于最传统的网络应用,你的 API 请求发出去后在等待响应,此时程序停止运行,甚至新的请求也得在响应结束后才

文章来源: wenyusuran.blog.csdn.net,作者:文宇肃然,版权归原作者所有,如需转载,请联系作者。

原文链接:wenyusuran.blog.csdn.net/article/details/120507463

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。