プラットフォームサポート
asyncio モジュールは移植可能に設計されていますが、一部のプラットフォームには、プラットフォームの基盤となるアーキテクチャと機能のために微妙な違いと制限があります。
ウィンドウズ
ソースコード: :source: `Lib / asyncio / proactor_events.py`, :source: `Lib / asyncio / windows_events.py`, :source: `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()
メソッドは実装されていません。 - サブプロセスはサポートされていません。
loop.subprocess_exec()
およびloop.subprocess_shell()
メソッドは実装されていません。
ProactorEventLoop には次の制限があります。
- loop.add_reader()および loop.add_writer()メソッドはサポートされていません。
Windowsの単調時計の解像度は、通常、約15.6ミリ秒です。 最高の解像度は0.5ミリ秒です。 解像度は、ハードウェア( HPET の可用性)とWindowsの構成によって異なります。
Windowsでのサブプロセスのサポート
Windowsでは、デフォルトのイベントループ ProactorEventLoop はサブプロセスをサポートしますが、 SelectorEventLoop はサポートしません。
policy.set_child_watcher()関数もサポートされていません。これは、 ProactorEventLoop には子プロセスを監視するための異なるメカニズムがあるためです。
マックOS
最新のmacOSバージョンは完全にサポートされています。
macOS <= 10.8
macOS 10.6、10.7、および10.8では、デフォルトのイベントループは selectors.KqueueSelector を使用しますが、これらのバージョンではキャラクターデバイスをサポートしていません。 SelectorEventLoop は、 SelectSelector または PollSelector を使用して、これらの古いバージョンのmacOSでキャラクターデバイスをサポートするように手動で構成できます。 例:
import asyncio
import selectors
selector = selectors.SelectSelector()
loop = asyncio.SelectorEventLoop(selector)
asyncio.set_event_loop(loop)