Python 现代开发学习笔记

(六)结合等待、计算与资源选择工具

当前任务 先尝试的方式 需要观察的内容
调用会阻塞的网络接口、文件工具 有上限的线程池 等待能否重叠,结果和错误由谁收集
独立、较大批量的纯 Python 计算 进程池 计算量是否抵得上启动与数据传递
使用提供异步接口的网络库 一个事件循环中的多个任务 等待时是否让出执行机会,取消时怎样收尾
很小或必须依次完成的工作 顺序执行 程序是否已经足够清楚,任务之间是否有依赖

本章运行的 CPython 3.12 用 GIL 协调 Python 字节码执行,同一进程的多个线程不会因此同时执行多份纯 Python 字节码。I/O 等待以及某些底层扩展可以释放 GIL,因此网络等待和计算循环的表现不同。NumPy 等库还可能有自己的底层并行方式,后面的数值计算章节结合实际操作再观察。

并发数量增加后,也会增加连接、内存、调度和外部服务负担。先确定任务之间的依赖、每项工作占据的资源和结果保存方式,再测量需要改进的那一段。接下来把“等待时让出执行机会”直接写进函数,用协程表达同样的推进过程。

笔记正文与全部题解 · Ctrl / ⌘ K