플랫폼 지원¶
asyncio
모듈은 이식성이 있도록 설계되었지만, 플랫폼의 하부 아키텍처와 기능으로 인해 일부 플랫폼에는 미묘한 차이점과 제약이 있습니다.
모든 플랫폼¶
loop.add_reader()
와loop.add_writer()
는 파일 I/O를 감시하는데 사용할 수 없습니다.
윈도우¶
윈도우의 모든 이벤트 루프는 다음 메서드를 지원하지 않습니다:
loop.create_unix_connection()
와loop.create_unix_server()
는 지원되지 않습니다.socket.AF_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.create_datagram_endpoint()
메서드는 지원되지 않습니다.loop.add_reader()
와loop.add_writer()
메서드는 지원되지 않습니다.
윈도우에서 단조 시계의 해상도는 대개 15.6 msec 근처입니다. 최상의 해상도는 0.5 msec입니다. 해상도는 하드웨어(HPET이 사용 가능한지)와 윈도우 구성에 따라 다릅니다.
윈도우에서의 서브 프로세스 지원¶
윈도우의 SelectorEventLoop
는 서브 프로세스를 지원하지 않습니다. 윈도우에서는, 대신 ProactorEventLoop
를 사용해야 합니다:
import asyncio
asyncio.set_event_loop_policy(
asyncio.WindowsProactorEventLoopPolicy())
asyncio.run(your_code())
ProactorEventLoop
가 자식 프로세스를 관찰하는 다른 메커니즘을 가지고 있으므로, policy.set_child_watcher()
함수도 지원되지 않습니다.
macOS¶
최신 macOS 버전은 완전하게 지원됩니다.
macOS <= 10.8
macOS 10.6, 10.7 및 10.8에서, 기본 이벤트 루프는 selectors.KqueueSelector
를 사용하는데, 이 버전에서는 문자 장치를 지원하지 않습니다. 이러한 이전 버전의 macOS에서 문자 장치를 지원하려면, SelectorEventLoop
가 SelectSelector
나 PollSelector
를 사용하도록 수동으로 구성할 수 있습니다. 예:
import asyncio
import selectors
selector = selectors.SelectSelector()
loop = asyncio.SelectorEventLoop(selector)
asyncio.set_event_loop(loop)