我已经尝试学习异步几天了,但是我无法使该示例函数正常工作。我想加快发出几百个HTTP请求的速度,但我想从简单开始。我希望能够指定我想要多少个请求。在进行调整时,我遇到了许多不同的错误,但是我无法正常工作。
这是我的代码:
import asyncio
import time
async def say():
print("Started")
await time.sleep(3) #something that takes a long time like an http request
print("Finsihed")
loop = asyncio.get_event_loop()
asyncio.gather(say(),say(),say())
loop.run_forever()
我对此非常满意,并且可以肯定我在运行循环时做错了什么,但是我不知道下一步该怎么做。感谢您的帮助。
答案 0 :(得分:0)
您的代码有几个问题:
time.sleep()
,因为调用time.sleep()
之类的阻塞函数会阻塞整个事件循环。asyncio.gather()
,必须等待它。asyncio.run()
API,而不是较旧的loop.run_forever()
以下是修正了这些问题的代码:
import asyncio
async def say():
print("Started")
await asyncio.sleep(3)
print("Finsihed")
async def main():
await asyncio.gather(say(), say(), say())
asyncio.run(main())
还请注意,您将需要使用aiohttp之类的可感知异步的库来正确使用asyncio。