Підтримка платформи¶
Модуль asyncio
розроблений як портативний, але деякі платформи мають незначні відмінності та обмеження через базову архітектуру та можливості платформ.
Усі платформи¶
loop.add_reader()
іloop.add_writer()
не можна використовувати для моніторингу файлового введення/виведення.
вікна¶
Вихідний код: Lib/asyncio/proactor_events.py, Lib/asyncio/windows_events.py, Lib/asyncio/windows_utils.py
Змінено в версії 3.8: У Windows ProactorEventLoop
тепер є циклом подій за замовчуванням.
Усі цикли подій у Windows не підтримують такі методи:
loop.create_unix_connection()
andloop.create_unix_server()
are not supported. Thesocket.AF_UNIX
socket family is specific to 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()
не підтримуються.
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 повністю підтримуються.
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)