Підтримка платформи¶
Модуль 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_UNIXsocket 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 milliseconds. The best resolution is 0.5 milliseconds. 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)