プラットフォームでのサポート
****************************

"asyncio" モジュールは可搬的であるようにデザインされていますが、いくつ
かのプラットフォームでは、その根底にあるアーキテクチャや性能による微妙
な動作の違いや制限があります。


全てのプラットホーム
====================

* "loop.add_reader()" と "loop.add_writer()" をファイル I/O を監視する
  ためには使えません。


Windows
=======

**ソースコード:** Lib/asyncio/proactor_events.py,
Lib/asyncio/windows_events.py, Lib/asyncio/windows_utils.py

======================================================================

バージョン 3.8 で変更: Windows では "ProactorEventLoop" がデフォルトの
イベントループになりました。

全ての Windows 上のイベントループは以下のメソッドをサポートしません:

* "loop.create_unix_connection()" と "loop.create_unix_server()" はサ
  ポートされません。 "socket.AF_UNIX" ソケットファミリーは Unix 固有で
  す。

* "loop.add_signal_handler()" と "loop.remove_signal_handler()" はサポ
  ートされていません。

"SelectorEventLoop" は以下の制限があります:

* "SelectSelector" はソケットイベントの待ち受けに使われます: このクラ
  スはソケットをサポートしますが 512 ソケットまでに制限されています。

* "loop.add_reader()" と "loop.add_writer()" はソケットハンドルのみを
  受け付けます (たとえばパイプファイル記述子はサポートされていません)
  。

* パイプはサポートされていません。従って "loop.connect_read_pipe()" と
  "loop.connect_write_pipe()" の2つのメソッドは未実装です。

* Subprocesses はサポートされていません。すなわち
  "loop.subprocess_exec()" と "loop.subprocess_shell()" の2つのメソッ
  ドは未実装です。

"ProactorEventLoop" は以下の制限があります:

* "loop.add_reader()" と "loop.add_writer()" はサポートされていません
  。

Windows のモノトニッククロックの時間分解能は、通常約15.6ミリ秒です。最
高分解能は0.5ミリ秒です。分解能はハードウエア (HPET が利用可能かどうか
) および WIndows の設定に依存します。


Windows におけるサブプロセスのサポート
--------------------------------------

Windows において、デフォルトのイベントループ "ProactorEventLoop" はサ
ブプロセスをサポートしますが、 "SelectorEventLoop" はサポートしません
。

"policy.set_child_watcher()" 関数もサポートされません。
"ProactorEventLoop" は子プロセスを監視するための異なる仕組みを持ってい
ます。


macOS
=====

最近の macOS バージョンは完全にサポートされています。

-[ 10.8 以前の macOS ]-

macOS 10.6, 10.7 および 10.8 では、デフォルトイベントループは
"selectors.KqueueSelector" をしていますが、このクラスはこれらの macOS
バージョンのキャラクターデバイスをサポートしていません。これらの macOS
バージョンでキャラクターデバイスをサポートするためには
"SelectorEventLoop" で "SelectSelector" または "PollSelector" を使うよ
うに手動で設定します。以下はその例です:

   import asyncio
   import selectors

   selector = selectors.SelectSelector()
   loop = asyncio.SelectorEventLoop(selector)
   asyncio.set_event_loop(loop)
