# 概述 # Python通过yield提供了对协程的基本支持,但是不完全。而第三方的gevent为Python提供了比较完善的协程支持。 # # gevent是第三方库,通过greenlet实现协程,其基本思想是: # # 当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO。 # # 由于切换是在IO操作时自动完成,所以gevent需要修改Python自带的一些标准库,这一过程在启动时通过monkey patch完成 import gevent, time def A(): print("A run...") gevent.sleep(0) # 上下文切换 print("A run again....") def B(): print("B run...") gevent.sleep(1) print("B run again....") def C(): print("C run...") gevent.sleep(0) print("C run again....") start = time.time() gevent.joinall([ gevent.spawn(A), gevent.spawn(B), gevent.spawn(C), ]) print(time.time() - start) # 总运行时间等于最长那个