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发送邮件示例(支持中文邮件标题)
Feb 16 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
python看某个模块的版本方法
Oct 16 Python
Python面向对象程序设计类的多态用法详解
Apr 12 Python
Anaconda 查看、创建、管理和使用python环境的方法
Dec 03 Python
如何使用repr调试python程序
Feb 28 Python
Python3-异步进程回调函数(callback())介绍
May 02 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
Jun 24 Python
Pytorch上下采样函数--interpolate用法
Jul 07 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 Python
Pytorch实验常用代码段汇总
Nov 19 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调用Webservice思路及源码分享
2014/06/04 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
Joomla框架实现字符串截取的方法示例
2017/07/18 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
JavaScript中的对象化编程
2008/01/16 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
Vue2学习笔记之请求数据交互vue-resource
2017/02/23 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
2017/06/16 jQuery
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
Python队列的定义与使用方法示例
2017/06/24 Python
python清理子进程机制剖析
2017/11/23 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
原生python实现knn分类算法
2019/10/24 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
python使用ctypes库调用DLL动态链接库
2020/10/22 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
优秀研究生自我鉴定
2013/12/04 职场文书
外企办公室竞聘演讲稿
2013/12/29 职场文书
聘用意向书
2014/07/29 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
python实现一个简单的贪吃蛇游戏附代码
2022/06/28 Python
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技