gevent 是一个基于python协程的网络库,遇到io自动切换
import requests
import gevent
from gevent import monkey
monkey.patch_all() # 用于将标准库中大部分阻塞式调用修改为协作式运行
def get_data(url):
print(f"run {url}")
result = requests.get(url).content
# print(f"{url}: {len(result)}")
return url, len(result)
if __name__ == '__main__':
gevent.joinall([
gevent.spawn(get_data, "https://www.baidu.com"),
gevent.spawn(get_data, "https://www.zhihu.com"),
]) # spawn 创建greenlent 协程对象, joinall 参数是列表,等待列表中的元素全部执行完毕
# 获取所有的结果
trans_list = []
for url in ["https://stackoverflow.com/", "https://www.douban.com", "https://www.github.com"]:
trans_list.append(gevent.spawn(get_data, url))
gevent.joinall(trans_list)
for j in trans_list:
print(j.value)