创建多个异步请求

2024-09-29 01:28:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚开始探索这个名为Requests-Html的新库,我刚刚通过Corey Schafer tutorial发现了它,挑战是创建一个包含n个不同请求的异步调用

例如,我们有以下代码,运行时间约为3,6秒:

async def get_delay1():
    r = await asession.get("https://httpbin.org/delay/1")
    return r

async def get_delay2():
    r = await asession.get("https://httpbin.org/delay/2")
    return r

async def get_delay3():
    r = await asession.get("https://httpbin.org/delay/3")
    return r

asession = AsyncHTMLSession()

t1 = time.perf_counter()

results = asession.run(get_delay1, get_delay2, get_delay3)

for result in results:
    response = result.html.url
    print(response)

t2 = time.perf_counter()

print(t2 - t1)

问题是,如果我想用这个库创建一个500异步请求,我应该怎么做?我不可能需要编写500个不同的函数,对吗

我试图创建一个包含函数生成器的列表,这样我可以自动传递其中的不同函数:

tasks = [get_delay1, get_delay2, get_delay3]
results = asession.run(tasks)

但是我得到了

ERROR`: 
asyncio.ensure_future(coro()) for coro in coros
TypeError: 'list' object is not callable

Tags: 函数httpsorggetasyncreturndefawait
1条回答
网友
1楼 · 发布于 2024-09-29 01:28:44

我已经知道怎么做了

创建列表后,我们必须调用

asession.run(*tasks)

这样,我们确保只将可调用项传递给run方法,即列表的元素,而不是列表本身

相关问题 更多 >