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

"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()" and "loop.create_unix_server()" are
  not supported. The "socket.AF_UNIX" socket family is specific to
  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 milliseconds.  The best resolution is 0.5 milliseconds. 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)
