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设计模式之观察者模式实例
Apr 26 Python
Django1.7+python 2.78+pycharm配置mysql数据库教程
Nov 18 Python
用Python登录Gmail并发送Gmail邮件的教程
Apr 17 Python
python创建和删除目录的方法
Apr 29 Python
Python爬虫实例扒取2345天气预报
Mar 04 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
python paramiko远程服务器终端操作过程解析
Dec 14 Python
tensorflow 环境变量设置方式
Feb 06 Python
python实现逢七拍腿小游戏的思路详解
May 26 Python
详细分析Python垃圾回收机制
Jul 01 Python
Opencv 图片的OCR识别的实战示例
Mar 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
一个简单的域名注册情况查询程序
2006/10/09 PHP
php中smarty区域循环的方法
2015/06/11 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
DEFER怎么用?
2006/07/01 Javascript
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
简约JS日历控件 实例代码
2013/07/12 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
详解Vue 动态组件与全局事件绑定总结
2018/11/11 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
[01:02:03]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS VG
2014/05/26 DOTA
Python入门篇之文件
2014/10/20 Python
更改Python命令行交互提示符的方法
2015/01/14 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
Python发展简史 Python来历
2019/05/14 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
python解决OpenCV在读取显示图片的时候闪退的问题
2021/02/23 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
中国高端家电购物商城:顺电
2018/03/04 全球购物
使用索引有什么好处
2016/07/27 面试题
运动会领导邀请函
2014/01/10 职场文书
大学生作弊检讨书
2014/02/19 职场文书
土木工程师职业规划范文
2014/03/07 职场文书
校园文化标语
2014/06/18 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
建筑横幅标语
2014/10/09 职场文书
2015教师年度工作总结范文
2015/04/07 职场文书
飞越疯人院观后感
2015/06/09 职场文书
MongoDB数据库常用的10条操作命令
2021/06/18 MongoDB