目录
第十五章、线程之协程
一、协程与线程和进程的区别
协助程序,线程和进程都是抢占式特点,线程和进程的切换我们是不能参与的。
而协程是非抢占式特点,协程也存在着切换,这种切换是由我们用户来控制的。
二、gevent模块
import gevent # 如果程序中没有耗时操作就顺序执行。def test1(): for i in range(5): print('test1...', i) gevent.sleep(1) # 使用耗时模块可以自动操作 def test2(): for i in range(5): print('test2...', i) gevent.sleep(1) if __name__ == '__main__': g1 = gevent.spawn(test1) g2 = gevent.spawn(test2) g1.run() print('程序结束了')
说明:gevent模块中自带了sleep耗时函数,当使用这个耗时函数时,cpu会跳转到另一个就绪的程序,达到人工设置让其自动切换的功能。
- 说明:如果需要使用time.sleep()耗时的话,需要打一个补丁
from gevent import monkeymonkey.patch_all()
#代码如下import geventimport timefrom gevent import monkey monkey.patch_all() def test1(): for i in range(5): print('test1...', i) time.sleep(1) def test2(): for i in range(5): print('test2...', i) time.sleep(1) if __name__ == '__main__': g1 = gevent.spawn(test1) g2 = gevent.spawn(test2) g1.run() print('程序结束了')
说明:打补丁后的效率和效果和上面不打补丁的是一样的