协程- gevent模块
2024-10-21 02:50:33
协程
1.什么是协助:在单线程下实现并发效果
2.协程的原理:
通过代码监听IO操作一旦遇到 IO 操作就立刻切换下一个程序
让cpu一直在工作 这样就可以一直占用CPU的效率 提高程序执行效率
切换+保存状态
from gevent import spawn
# 需要导入这个库 才可以 遇到 IO 操作就自动切换和保存
from gevent import monkey;monkey.patch_all()
# 为了更加全部的识别更多IO操作 最好加上导入这个猴子补丁
def fucn1():
print('我是func1')
time.sleep(2)
print('111111')
def fucn2():
print('我是func2')
time.sleep(3)
print('22222')
def func3(name):
print('我是func3',name)
time.sleep(3)
print('33333',name)
start = time.time()
gevent.joinall([spawn(fucn1),spawn(fucn2),spawn(func3,'moon')])
# 这样就可以同时执行这三个任务 并且遇到io操作就自动执行下一行
# 这样只需要3秒就可以执行完所有的程序
'''
我是func1
我是func2
我是func3 moon
111111
22222
33333 moon
3.0035367012023926
'''
print(time.time()-start)
g1 = spawn(fucn1)
g2 = spawn(fucn2)
g3 = spawn(func3,'moon')
g3.join()
# 把耗时最长的任务做一个等待结束 这样之前的任务就会根据IO操作
# 反复切换操作 也可以实现 按个io操作执行完就先接着执行哪一个
print(time.time()-start)
'''
我是func1
我是func2
我是func3 moon
111111
22222
33333 moon
3.0035367012023926
'''
最新文章
- Android测试网络是否连接
- ubuntu系统安装初始化脚本
- Command and Query Responsibility Segregation (CQRS) Pattern 命令和查询职责分离(CQRS)模式
- 试用 Nexus OSS 3.0 的docker仓库 (二)
- 三星在GPL下发布其exFAT文件系统实现源码
- C/C++文件操作1
- Ubuntu的一些常用快捷键
- 【转】ArrayList遍历的同时删除----不错
- 使用dfs实现1至n全阵列
- Rookey.Frame v1.0 视频教程发布了
- C++ 函数模板“偏特化”
- shell脚本命令(记录)
- MT【225】两平行直线夹曲线
- Oracle——存储过程的使用
- ASP.NET MVC + EF 更新的几种方式(超赞)
- matplotlib画的图保存为emf格式
- 部分真验货客户未取进FP IN_SALES_ORDER表有数据,前台规划页面没显示
- laravel 嵌套事务
- combined with the Referer header, to potentially build an exhaustive data set of user profiles and browsing habits Client Identification
- Java的定时调度
热门文章
- Elastic Stack 8.0 再次创建enrollment token
- Logstash: 如何创建可维护和可重用的Logstash管道
- 8. 使用Fluentd+MongoDB采集Apache日志
- 跟我学Python图像处理丨傅里叶变换之高通滤波和低通滤波
- VS中git概念解析与深度使用
- .Net CLR异常简析
- 使用Pytorch进行多卡训练
- 怎么在线预览.doc,.docx,.ofd,.pdf,.wps,.cad文件以及Office文档的在线解析方式。
- 前端框架Vue------>第一天学习(2) v-if
- 齐博x1万能数据统计接口