gpt4 book ai didi

python - 为多个函数正确实现(并发)Asyncio

转载 作者:行者123 更新时间:2023-12-02 02:49:47 25 4
gpt4 key购买 nike

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

这是实现:

文件 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() 然后在异步版本中使用 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]

关于python - 为多个函数正确实现(并发)Asyncio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62187571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com