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

"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()" はサポートされていません
  。

The resolution of the monotonic clock on Windows is usually around
15.6 msec.  The best resolution is 0.5 msec. The resolution depends on
the hardware (availability of HPET) and on the Windows configuration.


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)
