プラットフォームでのサポート¶
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 はサポートしません。
The policy.set_child_watcher() function is also
not supported, as ProactorEventLoop has a different mechanism
to watch child processes.
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)