正确实现多个函数的(并发)异步



>我有几个函数,它们的执行不相互依赖。我试图做的是并发执行它们,而不是顺序(同步(。我也添加了事件循环,但我无法确定它是否正常工作。

这是实现:

文件 1:

import file2
def funcA():
a, b = 1, 2
file2.main(a, b)

文件2:

def main(a, b):
asyncio.get_event_loop().run_until_complete(_main(a, b))
async def _main(a, b):
out1 = await funcA(a, b)
out2 = await funcB(a, b)
out3 = await funcC(a, b)
async def funcA(a, b):
result = 1 # some processing done here
return result
async def funcB(a, b):
result = 1 # some processing done here
return result
async def funcC(a, b):
result = 1 # some processing done here
return result

我无法弄清楚这些是否同时工作。我正在任何函数中添加time.sleep(10),执行就停在那里。我不希望它们在后台运行,因为我需要这些函数的输出

执行所需操作的一种方法是在main中使用asyncio.run(),然后在 main 的异步版本中gather。若要模拟长时间处理,请使用asyncio.sleep()请参阅以下代码:

import asyncio
def main(a, b):
res = asyncio.run(async_main(a, b))
print(f"in main, result is {res}")
async def funcA(a, b):
print('funcA - start')
await asyncio.sleep(3)
result = (a+b) # some processing done here
print('funcA - end')
return result
async def funcB(a, b):
print('funcB - start')
await asyncio.sleep(3)
result = (a+b)*2 # some processing done here
print('funcB - end')
return result
async def funcC(a, b):
print('funcC - start')
await asyncio.sleep(3)
result = (a+b)*3 # some processing done here
print('funcC - end')
return result
async def async_main(a, b):
print("in async_main")
res = await asyncio.gather(funcA(a, b), funcB(a, b), funcC(a, b))
print(f"in async_main, result is {res}")
return res
if __name__ == "__main__":
main(1, 2)

结果是:

in async_main
funcA - start
funcB - start
funcC - start
funcA - end
funcB - end
funcC - end
in async_main, result is [3, 6, 9]
in main, result is [3, 6, 9]

最新更新