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多进程并发(multiprocessing)用法实例详解
Jun 02 Python
Python heapq使用详解及实例代码
Jan 25 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
Python简单实现两个任意字符串乘积的方法示例
Apr 12 Python
在pycharm中设置显示行数的方法
Jan 16 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
Sep 16 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
Oct 27 Python
使用python 的matplotlib 画轨道实例
Jan 19 Python
python通用读取vcf文件的类(复制粘贴即可用)
Feb 29 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
python小白切忌乱用表达式
May 29 Python
python爬虫请求头的使用
Dec 01 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+MySQL 制作简单的留言本
2009/11/02 PHP
Extjs学习笔记之二 初识Extjs之Form
2010/01/07 Javascript
解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
2013/01/11 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
jQuery实现百度登录框的动态切换效果
2017/04/21 jQuery
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
Angular指令之restict匹配模式的详解
2017/07/27 Javascript
详解js静态检查工具eslint配置文件
2018/11/23 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
《javascript设计模式》学习笔记四:Javascript面向对象程序设计链式调用实例分析
2020/04/07 Javascript
Python中的自省(反射)详解
2015/06/02 Python
Python自动扫雷实现方法
2015/07/25 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
Flask-Mail用法实例分析
2018/07/21 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
python matplotlib库直方图绘制详解
2019/08/10 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
2021/01/06 Python
50个强大璀璨的CSS3/JS技术运用实例
2010/02/27 HTML / CSS
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
多媒体编辑专业毕业生推荐信
2013/11/05 职场文书
党员组织关系介绍信
2014/02/13 职场文书
搞笑婚前保证书
2015/02/28 职场文书
2015年公务员工作总结
2015/04/24 职场文书
招商银行收入证明
2015/06/17 职场文书
公司宣传语大全
2015/07/13 职场文书
Go语言实现一个简单的并发聊天室的项目实战
2022/03/18 Golang