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写的ARP攻击代码实例
Jun 04 Python
Python实现的三层BP神经网络算法示例
Feb 07 Python
python实现人民币大写转换
Jun 20 Python
Python实现高斯函数的三维显示方法
Dec 29 Python
python读取txt文件并取其某一列数据的示例
Feb 19 Python
使用Python OpenCV为CNN增加图像样本的实现
Jun 10 Python
在python中用print()输出多个格式化参数的方法
Jul 16 Python
python区分不同数据类型的方法
Oct 14 Python
PYTHON发送邮件YAGMAIL的简单实现解析
Oct 28 Python
解决pycharm中的run和debug失效无法点击运行
Jun 09 Python
Python字典实现伪切片功能
Oct 28 Python
python文件路径操作方法总结
Dec 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
dedecms模板标签代码官方参考
2007/03/17 PHP
php 图片上传类代码
2009/07/17 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
PHP简单获取及判断提交来源的方法
2016/04/22 PHP
PHP封装cURL工具类与应用示例
2019/07/01 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
JS截取字符串常用方法详细整理
2013/10/28 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
详解JavaScript中的blink()方法的使用
2015/06/08 Javascript
jQuery实现的自定义滚动条实例详解
2016/09/20 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
2017/12/11 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
JS判断数组四种实现方法详解
2020/06/29 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
Python数组定义方法
2016/04/13 Python
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
pandas DataFrame 删除重复的行的实现方法
2019/01/29 Python
django自定义非主键自增字段类型详解(auto increment field)
2020/03/30 Python
python datetime处理时间小结
2020/04/16 Python
彪马荷兰官网:PUMA荷兰
2019/05/08 全球购物
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
什么是URL
2015/12/13 面试题
酒店总经理工作职责
2013/12/13 职场文书
租车协议书范本
2014/04/22 职场文书
创先争优一句话承诺
2014/05/29 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
机动车登记业务委托书
2014/10/08 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书
创业不要错过,这4种餐饮新模式
2019/07/18 职场文书
导游词之天津盘山
2019/11/01 职场文书
巧用 -webkit-box-reflect 倒影实现各类动效(小结)
2021/04/22 HTML / CSS
python实现调用摄像头并拍照发邮箱
2021/04/27 Python