# coding:utf-8
import gevent
import requests
from gevent import monkey
# 猴子补丁就是在运行时对代码进行修改
# 由于IO操作非常耗时,程序经常会处于等待状态
# 比如请求多个网页有时候需要等待,gevent可以自动切换协程
# 遇到阻塞自动切换协程,程序启动时执行monkey.patch_all()解决
# 首行添加下面的语句即可
monkey.patch_all()
def run_task(url):
print('start by %s' % (url,))
try:
resp = requests.get(url=url)
print('%d bytes from %s' % (len(resp.text), url))
except Exception as ex:
print(ex.message)
if __name__ == "__main__":
"""
# 查看运行结果可以发现,三个协程是同时触发的,但是结束顺序不同
# 网页请求的时间不同,故结束顺序不同
# 但是该程序其实只有一个线程
"""
# 异步访问的url列表
urls = ['https://github.com/', 'https://bbs.csdn.net/', 'https://blog.csdn.net/']
# 定义协程方法
greenlets = [gevent.spawn(run_task, url) for url in urls]
# 添加协程任务,并且启动运行
gevent.joinall(greenlets=greenlets)