【发布时间】:2021-07-07 13:11:33
【问题描述】:
这里是示例代码
async def washing():
await asyncio.sleep(3)
print("All washed!")
async def myloop():
while 1:
await washing() #Is there an alternative to start washing coroutine?
print("start washing...")
await asyncio.sleep(5)
asyncio.run(myloop())
显然我会得到“全部洗过!”然后“开始洗涤...”打印出来,因为等待是阻塞的 - 它不会继续执行,直到命令执行后。
但我想要的是反过来,先“开始洗”。
我可以以非阻塞方式启动洗涤协程并继续执行下一个命令(例如打印)吗?这比简单的谁先打印的问题要严重得多,它是关于是否可以任意创建一个辅助协程。在这种阻塞方式下,虽然有两个异步函数,但它们不是并行运行,而是顺序运行,并且永远锁定在一个协程中。
【问题讨论】:
-
为什么不打印“开始洗涤”然后等待洗涤()?
-
这真的取决于你的目标,但
asyncio.create_task可能是你要找的。span> -
'为什么不打印“开始洗涤”然后等待洗涤()? ' - 这是一个简化的示例。真正的场景是启动另一个线程来执行一项可能需要数小时才能完成的意外任务。
标签: python python-asyncio