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发送伪造的arp请求
Jan 09 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
Apr 23 Python
Flask框架WTForm表单用法示例
Jul 20 Python
python消除序列的重复值并保持顺序不变的实例
Nov 08 Python
python3利用ctypes传入一个字符串类型的列表方法
Feb 12 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
使用 Python 清理收藏夹里已失效的网站
Dec 03 Python
Python Numpy数组扩展repeat和tile使用实例解析
Dec 09 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
基于TensorFlow中自定义梯度的2种方式
Feb 04 Python
Python如何配置环境变量详解
May 18 Python
详细介绍python类及类的用法
May 31 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将远程图片保存到本地服务器的实现代码
2015/08/03 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
javascript事件问题
2009/09/05 Javascript
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
jQuery实现获取元素索引值index的方法
2016/09/18 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
2016/12/16 Javascript
javascript数组去重常用方法实例分析
2017/04/11 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
2017/06/16 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
2020/05/03 Javascript
Python文件和目录操作详解
2015/02/08 Python
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
python实现logistic分类算法代码
2020/02/28 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
详解python中的异常捕获
2020/12/15 Python
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
暑期社会实践感言
2014/02/25 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
2015年学校安全管理工作总结
2015/05/11 职场文书
校园安全主题班会
2015/08/12 职场文书
优秀大学生申请书
2019/06/24 职场文书
成功的商业计划书这样写才最靠谱
2019/07/12 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python
python 中[0]*2与0*2的区别说明
2021/05/10 Python
解决Pytorch中关于model.eval的问题
2021/05/22 Python
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android