プラットフォームでのサポート¶
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
はサポートしません。
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)