创建多个异步请求
Creating multiple async requests
我刚刚开始探索这个名为 Requests-Html, which I've just dicovered through 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 个不同的函数吧?
我试图用函数生成器创建一个列表,这样我就可以在其中自动传递 n 个不同的函数,:
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
我已经知道怎么做了。
创建列表后,我们必须调用
asession.run(*tasks)
这样,我们确保我们只将可调用对象传递给 run
方法,即列表的元素而不是列表本身。
靠!
我刚刚开始探索这个名为 Requests-Html, which I've just dicovered through 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 个不同的函数吧?
我试图用函数生成器创建一个列表,这样我就可以在其中自动传递 n 个不同的函数,:
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
我已经知道怎么做了。
创建列表后,我们必须调用
asession.run(*tasks)
这样,我们确保我们只将可调用对象传递给 run
方法,即列表的元素而不是列表本身。
靠!