Python Eventlet 如何并发请求?

Python Eventlet 如何并发请求?

客户端使用 eventlet,代码如下:

import eventlet

import 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 FastAPI

import 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)

先启动服务端,然后再跑一下客户端的代码,使用 Linuxtime 命令来看耗时:

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

回到顶部