ポリシー¶
警告
ポリシーは非推奨で、Python 3.16 で削除されます。
使いたいイベントループの実装を選ぶには、asyncio.run() 関数、または asyncio.Runner に loop_factory を指定する方法を推奨します。
イベントループポリシーは、現在の イベントループ の取得・設定と、新しいイベントループの作成に使うグローバルオブジェクトです。 異なるイベントループの実装を使うには、デフォルトのポリシーを 組み込みの別のポリシー に 置き換える ことができます。 また、これらの動作を変更する カスタムポリシー に置き換えることもできます。
ポリシーオブジェクト は、コンテキスト ごとに独立したイベントループを取得・設定します。 デフォルトではスレッドごとですが、カスタムポリシーでは コンテキスト を別の単位で定義できます。
カスタムイベントループポリシーは、get_event_loop()、set_event_loop()、new_event_loop() の動作を制御できます。
ポリシーオブジェクトは AbstractEventLoopPolicy 抽象基底クラスで定義された API を実装しなければなりません。
ポリシーの取得と設定¶
以下の関数は現在のプロセスに対するポリシーの取得や設定をするために使われます:
- asyncio.get_event_loop_policy()¶
プロセス全体にわたる現在のポリシーを返します。
バージョン 3.14 で非推奨:
get_event_loop_policy()関数は非推奨で、Python 3.16 で削除されます。
- asyncio.set_event_loop_policy(policy)¶
プロセス全体にわたる現在のポリシーを policy に設定します。
policy が
Noneの場合、デフォルトポリシーが現在のポリシーに戻されます。バージョン 3.14 で非推奨:
set_event_loop_policy()関数は非推奨で、Python 3.16 で削除されます。
ポリシーオブジェクト¶
イベントループポリシーの抽象基底クラスは以下のように定義されています:
- class asyncio.AbstractEventLoopPolicy¶
asyncio ポリシーの抽象基底クラスです。
- get_event_loop()¶
現在のコンテキストのイベントループを取得します。
AbstractEventLoopのインターフェースを実装したイベントループオブジェクトを返します。このメソッドは
Noneを返してはいけません。バージョン 3.6 で変更.
- set_event_loop(loop)¶
現在のコンテキストにイベントループ loop を設定します。
- new_event_loop()¶
新しいイベントループオブジェクトを生成して返します。
このメソッドは
Noneを返してはいけません。
バージョン 3.14 で非推奨:
AbstractEventLoopPolicyクラスは非推奨で、Python 3.16 で削除されます。
asyncio は以下の組み込みポリシーを提供します:
- class asyncio.DefaultEventLoopPolicy¶
デフォルトの asyncio ポリシーです。Unix では
SelectorEventLoop、Windows ではProactorEventLoopを使います。デフォルトのポリシーを手動でインストールする必要はありません。 asyncio はデフォルトポリシーを使うように自動的に構成されます。
バージョン 3.8 で変更: Windows では
ProactorEventLoopがデフォルトで使われるようになりました。バージョン 3.14 で変更: asyncio のデフォルトポリシーの
get_event_loop()は、イベントループが設定されていなければRuntimeErrorを送出するようになりました。バージョン 3.14 で非推奨:
DefaultEventLoopPolicyクラスは非推奨で、Python 3.16 で削除されます。
- class asyncio.WindowsSelectorEventLoopPolicy¶
SelectorEventLoopイベントループ実装を使った別のイベントループポリシーです。利用可能な環境: Windows.
バージョン 3.14 で非推奨:
WindowsSelectorEventLoopPolicyクラスは非推奨で、Python 3.16 で削除されます。
- class asyncio.WindowsProactorEventLoopPolicy¶
ProactorEventLoopイベントループ実装を使った別のイベントループポリシーです。利用可能な環境: Windows.
バージョン 3.14 で非推奨:
WindowsProactorEventLoopPolicyクラスは非推奨で、Python 3.16 で削除されます。
ポリシーのカスタマイズ¶
新しいイベントループのポリシーを実装するためには、以下に示すように DefaultEventLoopPolicy を継承して振る舞いを変更したいメソッドをオーバーライドすることが推奨されます。:
class MyEventLoopPolicy(asyncio.DefaultEventLoopPolicy):
def get_event_loop(self):
"""Get the event loop.
This may be None or an instance of EventLoop.
"""
loop = super().get_event_loop()
# Do something with loop ...
return loop
asyncio.set_event_loop_policy(MyEventLoopPolicy())