Python Eventlet 如何并发请求?
客户端使用 eventlet
,代码如下:
import eventletimport urllib.request
urls = [
"http://localhost:5000/",
"http://localhost:5000/",
"http://localhost:5000/",
]
def fetch(url: str) -> str:
return urllib.request.urlopen(url).read()
pool = eventlet.GreenPool(1000)
for body in pool.imap(fetch, urls):
print("got body", len(body), body)
服务端使用 fastapi
搭建,为什么可以区分客户端是否真的并发请求了,我们加上一个延迟
python">from fastapi import FastAPIimport uvicorn
import time
app = FastAPI()
@app.get('/')
def root():
time.sleep(3)
return {"message": "Hello World"}
if __name__ == '__main__':
uvicorn.run("api:app", host="0.0.0.0", port=5000)
先启动服务端,然后再跑一下客户端的代码,使用 Linux
的 time
命令来看耗时:
got body 25 b'{"message":"Hello World"}'got body 25 b'{"message":"Hello World"}'
got body 25 b'{"message":"Hello World"}'
python -u "013.py" 0.25s user 0.01s system 2% cpu 9.276 total
可以看到,一共耗时 9
秒,而不是 3
秒,所以这个 eventlet
并没有并行,是我用错了吗?正确的打开方式是什么?
以上是 Python Eventlet 如何并发请求? 的全部内容, 来源链接: utcz.com/p/938295.html