这篇文章是基于 《Effective Python——编写高质量Python代码的59个有效方法》[美] 布雷特·斯拉特金 著 爱飞翔 译 这本书中的内容,写写自己在某方面的感悟,并摘录一些作为读书笔记供今后鞭策。侵删。
第 40 条:考虑用协程来并发地运行多个函数
Python 程序员可以用线程来运行多个函数,使这些函数看上去好像是在同一时间得到执行的。然而,线程有三个显著的缺点:
- 为了确保数据安全,我们必须使用特殊的工具来协调这些线程。使得多线程的代码,要比单线程的过程式代码更加难懂。这中复杂的多线程代码,会逐渐令程序变得难于扩展和维护。
- 线程需要占用大量内存,每个正在执行的线程,大约占据 8MB 内存。如果只开十几个函数,并且想用线程来模拟出同时运行的结果,那就会出现问题。在这些函数中,有的函数与用户发送给服务器的请求相对应,有的函数与屏幕上面的像素相对应,还有的函数与仿真程序中的粒子相对应。如果每调用一次函数,就要开一个线程,那么计算机显然无法接受。
- 线程启动时的开销比较大。如果程序不停地依靠创建新线程来同时执行多个函数,并等待这些进程结束,那么使用线程所引发的开销,就会拖慢整个程序的速度。
python 的协程可以避免上述问题,它使得 Python 程序看上去好像是在同时运行多个函数。协程的实现方