Python中的异步IO示例
我正在努力学习母语交际。 我运行上面的示例,但我不理解它 这是一个例子Python中的异步IO示例,python,async-await,python-asyncio,Python,Async Await,Python Asyncio,我正在努力学习母语交际。 我运行上面的示例,但我不理解它 这是一个例子 import asyncio async def say_after(delay, what): await asyncio.sleep(delay) print(what) async def main(): task1 = asyncio.create_task( say_after(3, "A") ) task2 = asynci
import asyncio
async def say_after(delay, what):
await asyncio.sleep(delay)
print(what)
async def main():
task1 = asyncio.create_task(
say_after(3, "A")
)
task2 = asyncio.create_task(
say_after(2, "B")
)
print("----0")
await task1
print("----1")
await task2
asyncio.run(main())
我听说,等待
等待任务完成。
我希望在订单上打印出来
A
B
----1
然而,在上面的示例中,---1
在打印B
和A
之后输出
以下是打印的输出
--0
B
A.
----1
为什么要创建此输出
你知道有一个网站收集了很多有用的例子来研究本地协同程序吗?以下是时间轴上发生的事情: 0秒后:
启动task1
启动task2
- 输出
--0
块等待任务1
打印task2
并完成B
打印task1
并完成A
返回等待任务1
- 输出
--1
返回(任务在1秒前已完成)等待任务2
- 无法保证异步任务的运行顺序。您唯一能保证的是当您等待时,
main中的任务执行将停止,直到该任务完成。以下是您的程序的所有有效输出,您不能假设您将获得任何特定输出:
A
B
----0
----1
--0
将始终位于A
和B
之前,因为这两个任务在主功能运行时分别休眠2秒或3秒<代码>A
总是在B
之后,因为task2比task1早起1秒。tbh我不知道是否可以保证睡眠(2)
比睡眠(3)
早起,但我认为如果不这样做,事情会严重出错。@mkrieger1在实践中,几乎可以肯定是这样。但这不能保证。一个系统,print
在内部以异步方式实现,可能需要4秒钟才能完成,这可能会产生这些结果(愚蠢的例子)。这是一个令人信服的论点。
B
A
----0
----1
----0
A
B
----1
----0
B
A
----1
A
----0
B
----1
B
----0
A
----1
A
----0
----1
B
----0
A
----1
B