# 串行执行import time
deffunc1():for i inrange(100000000):
i +=1deffunc2():for i inrange(100000000):
i +=1if __name__ =='__main__':
start_time = time.time()
func1()
func2()print(time.time()- start_time)# 9.42405915260315# 通过yield,实现保存状态加切换(自定义的切换,并不是遇到io才切,所以它并不能节约时间)# 单纯的切换,不但不会提高效率,反而会降低效率 import time
deffunc1():for i inrange(100000000):
i +=1yielddeffunc2():
g = func1()# 先执行一下func1for i inrange(100000000):
i +=1next(g)# 回到func1执行if __name__ =='__main__':
start_time = time.time()
func2()print(time.time()- start_time)# 22.581471920013428
1.4、greenlet
greenlet模块和yield没有什么区别,就只是单纯的切,跟效率无关
只不过比yield更好一点,切的时候方便一点。但是仍然没有解决效率
greenlet可以让你在多个任务之间来回的切
安装:
pip3 install greenlet
from greenlet import greenlet
import time
# 遇到io不会切,初级模块,gevent模块基于它写的,处理io切换defeat(name):print('{}吃了一口饭'.format(name))
time.sleep(1)# 当遇到IO的时候它也没有切,这就得用gevent了
p.switch('张三')print('{}又吃了一口饭'.format(name))
p.switch()defplay(name):print('{}玩了一会儿'.format(name))
e.switch()print('{}又玩了一会儿'.format(name))
e.switch()if __name__ =='__main__':
e = greenlet(eat)
p = greenlet(play)
e.switch('张三')# 可以在第一次switch时传入参数,以后都不需要