asyncio - 代码同步执行
asyncio - Code is executing synchronously
我是 python 初学者,从 https://www.youtube.com/watch?v=iG6fr81xHKA&t=269s 那里了解 asyncio 的强大功能,我尝试使用所示示例并将其重新用于执行 10 次。这是一个代码片段
def main(x):
print("Hello")
time.sleep(3)
print("World!")
所以我尝试以异步方式执行此操作,但它不会异步执行。
到目前为止,这是我尝试过的。我做错了什么?
import time
import asyncio
async def main(x):
print(f"Starting Task {x}")
await asyncio.sleep(3)
print(f"Finished Task {x}")
async def async_io():
for i in range(10):
await main(i)
if __name__ == "__main__":
start_time = time.perf_counter()
asyncio.run(async_io())
print(f"Took {time.perf_counter() - start_time} secs")
我也试过在 asyncio 中使用 queue_task。
使用 await
,根据定义,等待任务 main
完成。因此,您的代码原样与您在上面发布的同步代码没有什么不同。如果你想同时(异步)运行它们,在等待结果的同时,你应该使用asyncio.gather
or asyncio.wait
。
async def async_io():
tasks = []
for i in range(10):
tasks += [main(i)]
await asyncio.gather(*tasks)
如果您不想等待所有 main()
调用完成,您也可以只使用 asyncio.create_task(main(i))
, which creates a Task
对象并安排其在后台执行。在这种情况下,def async_io()
不再需要异步。
我是 python 初学者,从 https://www.youtube.com/watch?v=iG6fr81xHKA&t=269s 那里了解 asyncio 的强大功能,我尝试使用所示示例并将其重新用于执行 10 次。这是一个代码片段
def main(x):
print("Hello")
time.sleep(3)
print("World!")
所以我尝试以异步方式执行此操作,但它不会异步执行。 到目前为止,这是我尝试过的。我做错了什么?
import time
import asyncio
async def main(x):
print(f"Starting Task {x}")
await asyncio.sleep(3)
print(f"Finished Task {x}")
async def async_io():
for i in range(10):
await main(i)
if __name__ == "__main__":
start_time = time.perf_counter()
asyncio.run(async_io())
print(f"Took {time.perf_counter() - start_time} secs")
我也试过在 asyncio 中使用 queue_task。
使用 await
,根据定义,等待任务 main
完成。因此,您的代码原样与您在上面发布的同步代码没有什么不同。如果你想同时(异步)运行它们,在等待结果的同时,你应该使用asyncio.gather
or asyncio.wait
。
async def async_io():
tasks = []
for i in range(10):
tasks += [main(i)]
await asyncio.gather(*tasks)
如果您不想等待所有 main()
调用完成,您也可以只使用 asyncio.create_task(main(i))
, which creates a Task
对象并安排其在后台执行。在这种情况下,def async_io()
不再需要异步。