Python 进阶
Python 协程实现原理
dict 和 set 实现原理
Python 线程安全
Python 抽象语法树(AST)
Python 日志输出
Python 扩展入门(一)
Python 程序执行原理
Python 垃圾回收
Python 动态创建类
检查工具
PyFrameObject
yield 生成器工作原理
dict 设计与实现
Python 性能分析原理
PyCodeObject
Python 弱引用
Python 性能分析原理(二)
Python 源码分析(一)
Python Annotated
Python 依赖注入
python freelist
python代码编译成pyc
Python mmap 内存映射文件
Python值得学习的内容
async Future 对象
asyncio loop的实现
asyncio.sleep 的实现
asyncio 原理
Python 代码加密
Python Token类型
Python 扩展入门(二)
Python 性能优化
本文档使用 MrDoc 发布
-
+
首页
asyncio 原理
### 代码示例 ``` import asyncio async def main(): await asyncio.create_task(asyncio.sleep(1)) await asyncio.sleep(0) asyncio.run(main()) ``` 我们根据上面的代码来解析asyncio的原理。 ### asyncio.run 的执行过程 ``` def run(main: coroutine|Future): """1. 判断是否已经有了 event loop,如果有了则报错退出,因为一个线程只能有一个event loop;""" if events._get_running_loop() is not None: raise RuntimeError """2. 创建event loop;""" loop: BaseEventLoop = events.new_event_loop() """ 3. 设置 event loop,这里是将 event loop设置给 全局变量`events._event_loop_policy`; 因为 event loop的管理有一定的规则,这个规则并不是固定的,你也可以自定义规则, 比如,默认的规则是每个线程一个event loop,但是只有主线程有,并不会自动给其他线程创建。 你也可以自定义一个规则,给每个线程都自动创建event loop,或者所有线程共用一个。 所以,event loop都是由_event_loop_policy来管理,当你需要event loop的时候应该找 _event_loop_policy 获取,它可以让你获取到当前线程的event loop。 另外,不同的规则对应的event loop类型也可能不一样,可选的类型有: select/poll/epoll/proactor等等。 Linux默认的是 select 模式,Windows默认的是proactor。 关于这方面的文档,可以参考: https://www.xiaolincoding.com/os/8_network_system/selete_poll_epoll.html """ events.set_event_loop(loop) """ 4. 等待执行完成 """ return loop.run_until_complete(main) ``` ### Future/coroutine/task 的概念
gaojian
2023年11月26日 10:58
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码