gpt4 book ai didi

python - 如何在 Python 3.6 中执行 2 个协程

转载 作者:行者123 更新时间:2023-12-03 16:59:58 26 4
gpt4 key购买 nike

我无法在 Python 3.6 程序中并行执行两个协程。下面是一个例子:

import asyncio, time

def main():
loop = asyncio.get_event_loop()
loop.run_until_complete(start_coros())


async def start_coros():
await coro1()
await coro2()


async def coro1():
print("coro1")
time.sleep(3000)


async def coro2():
print("coro2 - we want to get here")


if __name__ == "__main__":
main()

如您所见,第一个协程首先执行,但第二个协程不会并发运行。

你能给我一个关于如何同时运行它们的提示吗?

预先感谢您的帮助

最佳答案

要“并行”运行两个协程,请创建任务:

async def start_coros():
# ensure_future -> create_task in Python 3.7
tasks = [asyncio.ensure_future(coro()) for coro in (coro1, coro2)]
await asyncio.wait(tasks)

然而在 coro1中存在一个巨大的问题。 . asyncio基于协同调度。一次只能运行一个协程。调度程序在协程之间切换,但只有当正在运行的协程等待某些东西时才会发生这种情况。如果协程在 awaits 之间花费太多时间,程序似乎没有响应。所以避免 time.sleep() !
async def coro1():
print("coro1")
await asyncio.sleep(3000)

关于python - 如何在 Python 3.6 中执行 2 个协程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62176212/

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