协程
什么是协程?
进程 :资源单位
线程 :执行单位
协程 :单线程下实现并发
复习 什么是并发
多道技术(时间上的复用) 切换 + 保存状态
看起来像同时执行 就可以称之为并发
协程: 完全是程序员自己意淫出来的名词 单线程下实现并发
程序员自己通过代码自己检测程序中的IO
一旦遇到IO自己通过代码切换
给操作系统的感觉是你这个线程没有任何的IO
ps:欺骗操作系统 让它误认为你这个程序一直没有IO
从而保证程序在运行态和就绪态来回切换
提升代码的运行效率
切换+保存状态就一定能够提升效率吗???
当你的任务是iO密集型的情况下 提升效率
如果你的任务是计算密集型的 降低效率
#基于yield并发执行 1.3952205181121826 import time def func1(): while True: 10000000+1 yield def func2(): g=func1() for i in range(10000000): time.sleep(100) # 模拟IO,yield并不会捕捉到并自动切换 i+1 next(g) start=time.time() func2() stop=time.time() print(stop-start)
需要找到一个能够识别IO的一个工具 gevent 模块
from gevent import monkey;monkey.patch_all() # 由于该模块经常被使用 所以建议写成一行 from gevent import spawn import time """ 注意gevent模块没办法自动识别time.sleep等io情况 需要你手动再配置一个参数 他就是我们的小猴老师 monkey """ def heng(): print("哼") time.sleep(2) print('哼') def ha(): print('哈') time.sleep(3) print('哈') def heiheihei(): print('嘿嘿嘿') time.sleep(5) print('嘿嘿嘿') start = time.time() g1 = spawn(heng) 他会有一个返回值 可是使用join方法 不然 spawn()里的函数就直接执行 但是spawn也不等他执行完就 结束了 g2 = spawn(ha) # spawn会检测所有的任务 g3 = spawn(heiheihei) g1.join() g2.join() g3.join() print(time.time() - start)
趁自己还没死 多折腾折腾