python复制文件夹不阻塞_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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值