プラットフォームでのサポート¶
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)