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编写web API的教程
Apr 30 Python
python实现在sqlite动态创建表的方法
May 08 Python
Python环境变量设置方法
Aug 28 Python
Python实现压缩与解压gzip大文件的方法
Sep 18 Python
Python的UTC时间转换讲解
Feb 26 Python
Python django框架应用中实现获取访问者ip地址示例
May 17 Python
python识别文字(基于tesseract)代码实例
Aug 24 Python
Pycharm中Python环境配置常见问题解析
Jan 16 Python
git查看、创建、删除、本地、远程分支方法详解
Feb 18 Python
什么是python类属性
Jun 10 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
Jun 29 Python
如何通过一篇文章了解Python中的生成器
Apr 02 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命令行脚本接收传入参数的三种方式
2014/08/20 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
linux中cd命令使用详解
2015/01/08 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
Vue.js中用v-bind绑定class的注意事项
2016/12/13 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
angular基于ng-alain定义自己的select组件示例
2018/02/23 Javascript
js构建二叉树进行数值数组的去重与优化详解
2018/03/26 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
python 简易计算器程序,代码就几行
2009/08/29 Python
python 中random模块的常用方法总结
2017/07/08 Python
获取python文件扩展名和文件名方法
2018/02/02 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
利用python修改json文件的value方法
2018/12/31 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
基于CSS3制作立体效果导航菜单
2016/01/12 HTML / CSS
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
BSTN意大利:德国街头和运动文化高品质商店
2020/12/22 全球购物
中软Java笔试题
2012/11/11 面试题
大学校园生活自我鉴定
2014/01/13 职场文书
商务经理岗位职责
2014/08/03 职场文书
党员民主生活会整改措施
2014/09/26 职场文书
开工典礼致辞
2015/07/29 职场文书
公安干警正风肃纪心得体会
2016/01/15 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书
五年级作文之成长
2019/09/16 职场文书