Python使用monkey.patch_all()解决协程阻塞问题

 更新时间:2020年04月15日 08:37:21   作者:cool小伙  
这篇文章主要介绍了Python使用monkey.patch_all()解决协程阻塞问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

直接参考以下实例,采用协程访问三个网站

由于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队列通信:rabbitMQ的使用(实例讲解)

    python队列通信:rabbitMQ的使用(实例讲解)

    下面小编就为大家分享一篇python队列通信:rabbitMQ的使用(实例讲解),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Python安装lz4-0.10.1遇到的坑

    Python安装lz4-0.10.1遇到的坑

    本篇文章给大家分享了Python安装lz4-0.10.1的详细过程以及遇到的坑,需要的读者们参考下。
    2018-05-05
  • 对pandas中apply函数的用法详解

    对pandas中apply函数的用法详解

    下面小编就为大家分享一篇对pandas中apply函数的用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python 调用PIL库失败的解决方法

    Python 调用PIL库失败的解决方法

    今天小编就为大家分享一篇Python 调用PIL库失败的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python SQLite3简介

    Python SQLite3简介

    这篇文章主要为大家详细介绍了Python SQLite3的简单介绍以及使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • PyCharm添加Anaconda中的虚拟环境Python解释器出现Conda executable is not found错误解决

    PyCharm添加Anaconda中的虚拟环境Python解释器出现Conda executable is not

    这篇文章主要给大家介绍了关于PyCharm添加Anaconda中的虚拟环境Python解释器出现Conda executable is not found错误的解决办法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-02-02
  • 用Python监控NASA TV直播画面的实现步骤

    用Python监控NASA TV直播画面的实现步骤

    本文分享一个名为"Spacestills"的开源程序,它可以用于查看 NASA TV 的直播画面(静止帧)
    2021-05-05
  • python学生管理系统的实现

    python学生管理系统的实现

    这篇文章主要为大家详细介绍了python学生管理系统的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • python神经网络学习数据增强及预处理示例详解

    python神经网络学习数据增强及预处理示例详解

    这篇文章主要为大家介绍了python神经网络学习数据增强及预处理示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 仅用几行Python代码就能复制她的U盘文件?

    仅用几行Python代码就能复制她的U盘文件?

    上大学的时候有老师不给上课的PPT,就总想有个程序能偷偷复制老师的U盘一直没有去实现,最近不想看论文就想起来这个事情了,发现其实用几行python代码就能搞定.分两步,首先写出来python代码,其次把.py文件转换成exe文件,直接在windows电脑上后台运行,需要的朋友可以参考下
    2021-06-06

最新评论