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连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
python实现数据预处理之填充缺失值的示例
Dec 22 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
解决PyCharm的Python.exe已经停止工作的问题
Nov 29 Python
利用Python正则表达式过滤敏感词的方法
Jan 21 Python
python使用flask与js进行前后台交互的例子
Jul 19 Python
python2和python3实现在图片上加汉字的方法
Aug 22 Python
详解Python可视化神器Yellowbrick使用
Nov 11 Python
python 中的paramiko模块简介及安装过程
Feb 29 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
详解Django中views数据查询使用locals()函数进行优化
Aug 24 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
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
php获取本机真实IP地址实例代码
2016/03/31 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
JS localStorage实现本地缓存的方法
2013/06/22 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
javascript 寻找错误方法整理
2014/06/15 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
JS实现网页背景颜色与select框中颜色同时变化的方法
2015/02/27 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
bootstrap flask登录页面编写实例
2016/11/01 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
axios 实现post请求时把对象obj数据转为formdata
2019/10/31 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
初学python数组的处理代码
2011/01/04 Python
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
html5 div布局与table布局详解
2016/11/16 HTML / CSS
中国宠物用品商城:E宠商城
2016/08/27 全球购物
什么是View State?
2013/01/27 面试题
市政施工员自我鉴定
2014/01/15 职场文书
大学生个人事迹材料
2014/01/21 职场文书
2014年两会学习心得体会
2014/03/17 职场文书
读书之星事迹材料
2014/05/12 职场文书
护理学专业求职信
2014/06/29 职场文书
2014年校务公开工作总结
2014/12/18 职场文书
单位考核鉴定意见
2015/06/05 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang
windows安装python超详细图文教程
2021/05/21 Python
详解CSS伪元素的妙用单标签之美
2021/05/25 HTML / CSS
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android