ポリシー
********

警告:

  ポリシーは非推奨で、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())
