【发布时间】:2020-11-01 14:12:09
【问题描述】:
我最近开始研究 Python 中的异步编程。假设我们要异步运行一个函数,下面是一个例子:
async def print_i_async(no):
print("Async: Preparing print of " + str(no))
await asyncio.sleep(1)
print(str(no))
async def main_async(no):
await asyncio.gather(*(print_i_async(i) for i in range(no)))
asyncio.run(main_async(no))
这将按预期异步工作。但是,我不清楚,如果不使用asyncio.gather(),我们为什么要使用异步函数。例如:
def print_i_serial(no):
print("Serial: Preparing print of " + str(no))
time.sleep(1)
print(str(no))
for i in range(5):
print_i_serial(i)
for i in range(5):
asyncio.run(print_i_async(i))
这两个函数产生相同的结果。我错过了什么吗?如果我们不使用asyncio.gather(),我们是否有任何理由使用async def,因为这是我们实际获得异步结果的方式?
【问题讨论】:
标签: python python-3.x asynchronous concurrency python-asyncio