第十五章、线程之协程
第十五章、线程之协程
一、协程与线程和进程的区别
协助程序,线程和进程都是抢占式特点,线程和进程的切换我们是不能参与的。
而协程是非抢占式特点,协程也存在着切换,这种切换是由我们用户来控制的。
二、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 monkey
monkey.patch_all()
#代码如下
import gevent
import time
from 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('程序结束了')
说明:打补丁后的效率和效果和上面不打补丁的是一样的