Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的异步IO示例_Python_Async Await_Python Asyncio - Fatal编程技术网

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
2秒后:

  • task2
    打印
    B
    并完成
3秒后:

  • task1
    打印
    A
    并完成
  • 等待任务1
    返回
  • 输出
    --1
  • 等待任务2
    返回(任务在1秒前已完成)

    • 无法保证异步任务的运行顺序。您唯一能保证的是当您等待时,
      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