Python3.7高度なプログラミングのasync/await asyncioタスクtaskによる同時実行コラボレーション

1373 ワード

どうきじっこうきょうてい
import asyncio
import time

#    main    await       ,          ,    await             await                
async def say_after(delay, what):
    await asyncio.sleep(delay)
    print(what)

async def main():
    print(f"started at {time.strftime('%X')}")

    await say_after(1, 'hello')
    await say_after(2, 'world')

    print(f"finished at {time.strftime('%X')}")

asyncio.run(main())

同時実行のコンセンサス
import asyncio
import time

#           :             task      ,              ,           ,           
async def say_after(delay, what):
    await asyncio.sleep(delay) #                ?   time.sleep(delay)   asyncio        ,       time.sleep()         
    # time.sleep(delay)
    print(what)

async def main():
    print(f"started at {time.strftime('%X')}")

    #         
    task1 = asyncio.create_task(say_after(1,'hello'))
    task2 = asyncio.create_task(say_after(2,'world'))

    #                ,  Python                    ,      2 
    await task1
    await task2
    print(f"finished at {time.strftime('%X')}")

asyncio.run(main())

asyncio.sleep(delay)は、ブロック動作をシミュレートするために使用され、待機可能なオブジェクトtimeを返す時間のかかるタスクと見なすことができる.sleep(delay)は、時間のかかる操作をシミュレートできますが、await構文では使用できません.待機可能なオブジェクトではありません.