我无法让两个协程在我的 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)