如何使用Python FastAPI和Asyncio在几秒钟内将数百个请求发送到URL?

约翰·我

我正在尝试http://httpbin.org/uuid使用以下代码段一次向服务器发送100个请求

from fastapi import FastAPI
from time import sleep
from time import time
import requests
import asyncio

app = FastAPI()

URL= "http://httpbin.org/uuid"


# @app.get("/")
async def main():
    r = requests.get(URL)
    # print(r.text)
    
    return r.text

async def task():
    tasks = [main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main(),main()]
    # print(tasks)
    # input("stop")
    result = await asyncio.gather(*tasks)
    print (result)

@app.get('/')
def f():
    start = time()
    asyncio.run(task())
    print("time: ",time()-start)

我将FastAPI与Asyncio结合使用,以达到3秒或更短的最短时间,但是使用上述方法,我得到的总时间为66秒,即超过一分钟。我还想保留该main功能,以便在上进行其他操作r.text我知道要达到如此低的时间,需要并发,但是我不确定我在这里犯了什么错误。

亚历克斯·诺南

requests是一个同步库。您需要使用一个异步库来异步发出数百个请求。以下是使用示例aiohttp

from fastapi import FastAPI
from time import time
import aiohttp
import asyncio

app = FastAPI()

URL = "http://httpbin.org/uuid"


async def main(session):
    async with session.get(URL) as response:
        return await response.text()


async def task():
    async with aiohttp.ClientSession() as session:
        tasks = [main(session) for i in range(100)]
        result = await asyncio.gather(*tasks)
        print(result)


@app.get('/')
async def f():
    start = time()
    await task()
    print("time: ", time() - start)

输出量

['{\n  "uuid": "65c454bf-9b12-4ba8-98e1-de636bffeed3"\n}\n', '{\n  "uuid": "03a48e56-2a44-48e3-bd43-a0b605bef359"\n}\n',...
time:  0.5911855697631836

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Flask将数据从JS发送到Python?

如何使用RestTemplate将POST请求发送到相对URL?

使用R中的循环将数百个数据帧导出为xlsx

如何使用RxJS处理数百个请求而不会崩溃?

python请求如何将数据发送到网站

如何使用Java将POST请求发送到Octoprint?

如何在几秒钟内将TIMESTAMP导入POSTGRES?来自大型CSV

如何使用python将请求发送到tensorflow服务器(tensorflow-serving)?

使用Twilio发送数百个不同编号的SMS导致发送重复消息

python-使用请求从数百个网页中获取内容

如何使用Python请求将图像发送到Strapi?

如何将HTTP请求从我的FastAPI应用发送到另一个站点?

(Python)将数百个PNG转换为单个PDF

如何使用python将图像旋转请求发送到gprc服务器?

如何在几分钟和几秒钟内使用计时器

如何将字节缓冲几秒钟然后发送

Android Studio和TDD-如何在几秒钟内运行测试

如何使用python将网站的URL以NDEF格式发送到arduino?

如何使用QueryPerformanceCounter在几秒钟内获得结果?

挑战:如何使用Python在1秒钟内发送> 1000个HTTP请求

如何将Excel中的数百个文本URL转换为可单击的超链接?

如何结合使用ajax和CORS将json请求发送到另一个域

如何使用 JavaScript 在几秒钟内重新加载页面

使用python将HTTP请求行发送到jupyter

如何在几秒钟内将数字从 00.000000 增加到 48.853373 0.00001

如何使用 fetch 将变量发送到 GET 请求?

如何使用 Python 将 XML 文件发送到 RabbitMQ?

使用请求关闭发送到 url 的文件 - Python

如何将 IMPORTXML 用于数百个 URL?