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