Python使用monkey.patch_all()解决协程阻塞问题


Posted in Python onApril 15, 2020

直接参考以下实例,采用协程访问三个网站

由于IO操作非常耗时,程序经常会处于等待状态

比如请求多个网页有时候需要等待,gevent可以自动切换协程

遇到阻塞自动切换协程,程序启动时执行monkey.patch_all()解决

# 由于IO操作非常耗时,程序经常会处于等待状态
# 比如请求多个网页有时候需要等待,gevent可以自动切换协程
# 遇到阻塞自动切换协程,程序启动时执行monkey.patch_all()解决
# 首行添加下面的语句即可
from gevent import monkey; monkey.patch_all()
import gevent
from urllib import request
def run_task(url):
  print("Visit --> %s" % url)
  try:
    response = request.urlopen(url)
    data = response.read()
    print("%d bytes received from %s." %(len(data), url))
  except Exception:
    print("error")

if __name__ == '__main__':
  urls = ['https://github.com/', 'https://blog.csdn.net/', 'https://bbs.csdn.net/']
  # 定义协程方法
  greenlets = [gevent.spawn(run_task, url) for url in urls]
  # 添加协程任务,并且启动运行
  gevent.joinall(greenlets)

# 查看运行结果可以发现,三个协程是同时触发的,但是结束顺序不同
# 网页请求的时间不同,故结束顺序不同
# 但是该程序其实只有一个线程

输出结果

Visit --> https://github.com/
Visit --> https://blog.csdn.net/
Visit --> https://bbs.csdn.net/
bytes received from https://blog.csdn.net/.
bytes received from https://bbs.csdn.net/.
bytes received from https://github.com/.

Process finished with exit code 0

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
Jan 04 Python
Python实现上下班抢个顺风单脚本
Feb 07 Python
python计算日期之间的放假日期
Jun 05 Python
python的一些加密方法及python 加密模块
Jul 11 Python
解决Python3 控制台输出InsecureRequestWarning问题
Jul 15 Python
解析python实现Lasso回归
Sep 11 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
Nov 11 Python
python对Excel的读取的示例代码
Feb 14 Python
Python netmiko模块的使用
Feb 14 Python
python模拟哔哩哔哩滑块登入验证的实现
Apr 24 Python
用Python在Excel里画出蒙娜丽莎的方法示例
Apr 28 Python
使用BeautifulSoup4解析XML的方法小结
Dec 07 Python
使用python处理题库表格并转化为word形式的实现
Apr 14 #Python
浅谈Python中re.match()和re.search()的使用及区别
Apr 14 #Python
Jupyter加载文件的实现方法
Apr 14 #Python
利用jupyter网页版本进行python函数查询方式
Apr 14 #Python
python matplotlib:plt.scatter() 大小和颜色参数详解
Apr 14 #Python
python matplotlib.pyplot.plot()参数用法
Apr 14 #Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
Apr 14 #Python
You might like
PHP求最大子序列和的算法实现
2011/06/24 PHP
php导入模块文件分享
2015/03/17 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
Laravel重定向,a链接跳转,控制器跳转示例
2019/10/22 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
jQuery判断指定id的对象是否存在的方法
2015/05/22 Javascript
原生JS实现平滑回到顶部组件
2016/03/16 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
Jquery实时监听input value的实例
2017/01/26 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
2017/08/14 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
Vue 实现简易多行滚动"弹幕"效果
2020/01/02 Javascript
[56:01]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 Effect vs EG
2018/03/31 DOTA
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
python爬取网页内容转换为PDF文件
2020/07/28 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
python-视频分帧&多帧合成视频实例
2019/12/10 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
Python多线程正确用法实例解析
2020/05/30 Python
Python存储读取HDF5文件代码解析
2020/11/25 Python
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
社区志愿者活动方案
2014/08/18 职场文书
党支部三会一课计划
2014/09/24 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
银行优秀员工推荐信
2015/03/24 职场文书
行政介绍信范文
2015/05/04 职场文书
农贸批发市场管理制度
2015/08/07 职场文书