python

しょっちゅう忘れることを書いておく。

33

259 views

コルーチンとタスク

この章では、コルーチンとタスクを利用する高レベルのasyncioのAPIの概略について解説する。

コルーチン

aync/await構文で定義されたコルーチンは、asyncioを使うアプリケーションを書く方法として好ましい。
例えば、次のhelloと表示されるコードは1秒待ってからworldを表示する。

# coding: UTF-8
import asyncio


async def main():
    print("hello")
    await asyncio.sleep(1)
    print("world")


asyncio.run(main())

単にコルーチンを呼び出しただけでは、コルーチンの実行スケジュールは予約されない。
実際にコルーチンを実行するために、asyncioは3つの機構を提供している。

  • 最上位のエントリーポイントであるmain関数を実行するasyncio.run()関数
  • コルーチンをawaitする。次のコードは1秒大輝した後にhelloを出力し、さらに2秒間待機してからworldと出力する。
# coding: UTF-8
import asyncio
import time


async def say_after(delay, what):
    print(what+" start")
    await asyncio.sleep(delay)
    print(what + " end")


async def main():
    task1 = asyncio.create_task(
        say_after(1, 'hello')
    )

    task2 = asyncio.create_task(
        say_after(2, "world")
    )

    print(f"started at {time.strftime('%X')}")
    await task1
    await task2
    print(f"finished at {time.strftime('%X')}")

if __name__ == '__main__':
    asyncio.run(main())

awaitすると、task1とtask2が同時にキックされる。

  • asyncioのタスクとしてコルーチンを平行して実行するasyncio.create_task関数。

Page 40 of 56.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

マッスル

自己紹介

本サイトの作成者。
趣味:プログラム/水耕栽培/仮想通貨/激辛好き
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
仮想通貨はNEMが好き。
水耕栽培は激辛好きが高じて、キャロライナ・リーパーの栽培にチャレンジ中。

サイト/ブログ

https://www.osumoi-stdio.com/pyarticle/

ツイッター

@darkimpact0626