我无法在 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()
Run Code Online (Sandbox Code Playgroud)
如您所见,第一个协程首先执行,但第二个协程不会并发运行。
你能给我一个关于如何同时运行它们的提示吗?
预先感谢您的帮助
要“并行”运行两个协程,请创建任务:
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)
Run Code Online (Sandbox Code Playgroud)
然而,存在一个巨大的问题coro1。asyncio基于协作调度。一次只能运行一个协程。调度程序在协程之间切换,但这只有在正在运行的协程等待某些内容时才会发生。如果协程在 之间花费太多时间awaits,程序就会显得不响应。所以要避免time.sleep()!
async def coro1():
print("coro1")
await asyncio.sleep(3000)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
746 次 |
| 最近记录: |