协程
协程
协程:单线程下实现并发 并发:伪并行,遇到IO就切换,单核下多个任务之间切换执行,给你的效果就是貌似你的几个程序在同时执行.提高效率 任务切换 + 保存状态 并行:多核cpu,真正的同时执行 串行:一个任务执行完在执行另外一个任务 多线程多进程下的任务切换+保存状态是操作系统 串行 import time def func1(): time.sleep(1) print('func1') def func2(): time.sleep(2) print('func2') if __name__ == '__main__': func1() func2() # 基于yield并发执行,多任务之间来回切换,这就是个简单的协程的体现,但是他能够节省I/O时间吗?不能 import time def consumer(): '''任务1:接收数据,处理数据''' while True: x=yield # time.sleep(1) #发现什么?只是进行了切换,但是并没有节省I/O时间 print('处理了数据:',x) def producer(): '''任务2:生产数据''' g=consumer() # print('asdfasfasdf') next(g) #找到了consumer函数的yield位置 for i in range(3): # for i in range(10000000): g.send(i) #给yield传值,然后再循环给下一个yield传值,并且多了切换的程序,比直接串行执行还多了一些步骤,导致执行效率反而更低了。 print('发送了数据:',i) start=time.time() #基于yield保存状态,实现两个任务直接来回切换,即并发的效果 #PS:如果每个任务中都加上打印,那么明显地看到两个任务的打印是你一次我一次,即并发执行的. producer() #我在当前线程中只执行了这个函数,但是通过这个函数里面的send切换了另外一个任务 stop=time.time() # 串行执行的方式 res=producer() consumer(res) stop=time.time() print(stop-start)