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中dir函数用法分析
Apr 17 Python
Python程序中的观察者模式结构编写示例
May 27 Python
python使用xpath中遇到:到底是什么?
Jan 04 Python
Python处理文本换行符实例代码
Feb 03 Python
python pandas 如何替换某列的一个值
Jun 09 Python
详解python中的json和字典dict
Jun 22 Python
python 内置模块详解
Jan 01 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
Feb 28 Python
python内存动态分配过程详解
Jul 15 Python
python 命名规范知识点汇总
Feb 14 Python
教你怎么用Python监控愉客行车程
Apr 29 Python
Python获取字典中某个key的value
Apr 13 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 Document 代码注释规范
2009/04/13 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
javascript控制层显示或隐藏的方法
2015/07/22 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
简单讲解Python中的闭包
2015/08/11 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
python简单实现AES加密和解密
2019/03/28 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
利用python-pypcap抓取带VLAN标签的数据包方法
2019/07/23 Python
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
汽车驾驶求职信
2013/10/25 职场文书
设计总监岗位职责
2013/12/07 职场文书
接待员岗位责任制
2014/02/10 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
董事长助理岗位职责
2015/02/11 职场文书
员工家属慰问信
2015/03/24 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript
SQL Server表分区降低运维和维护成本
2022/04/08 SQL Server