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 字典(Dictionary)操作详解
Mar 11 Python
在Python中操作文件之seek()方法的使用教程
May 24 Python
用python写的一个wordpress的采集程序
Feb 27 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
对Python 数组的切片操作详解
Jul 02 Python
Python实现的从右到左字符串替换方法示例
Jul 06 Python
浅谈python中get pass用法
Mar 19 Python
python-序列解包(对可迭代元素的快速取值方法)
Aug 24 Python
python 利用turtle库绘制笑脸和哭脸的例子
Nov 23 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
Feb 28 Python
Django 解决新建表删除后无法重新创建等问题
May 21 Python
使用scrapy实现增量式爬取方式
Jun 21 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数据记录代码
2008/06/07 PHP
PHP数组实例详解
2016/06/26 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
JavaScript设计模式之工厂方法模式介绍
2014/12/28 Javascript
jQuery实现两款有动画功能的导航菜单代码
2015/09/16 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
2018/08/16 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
Vue.js实现tab切换效果
2019/07/24 Javascript
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
Python获取DLL和EXE文件版本号的方法
2015/03/10 Python
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
django如何连接已存在数据的数据库
2018/08/14 Python
Django 视图层(view)的使用
2018/11/09 Python
Django实现学生管理系统
2019/02/26 Python
使用matplotlib中scatter方法画散点图
2019/03/19 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
Pycharm安装第三方库失败解决方案
2020/11/17 Python
台湾母婴用品限时团购:妈咪爱
2018/08/03 全球购物
惠普香港官方商店:HP香港
2019/04/30 全球购物
如何在发生故障的节点上重新安装 SQL Server
2013/03/14 面试题
户外活动策划方案
2014/03/12 职场文书
网络优化专员求职信
2014/05/04 职场文书
项目建议书怎么写
2014/05/15 职场文书
写给医生的感谢信
2015/01/22 职场文书
2014年度个人总结范文
2015/03/09 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
观看焦裕禄观后感
2015/06/09 职场文书
导游词之江西赣州
2019/10/15 职场文书
virtualenv隔离Python环境的问题解析
2022/06/21 Python