پشتیبانی از پلتفرم¶
ماژول asyncio بهگونهای طراحی شده است که قابل حمل باشد، اما برخی پلتفرمها به دلیل معماری و قابلیتهای زیربنایی خود، تفاوتها و محدودیتهای ظریفی دارند.
همهی سکوها¶
loop.add_reader()وloop.add_writer()را نمیتوان برای پایش ورودی/خروجی پرونده به کار برد.نمیتوان از
loop.connect_read_pipe()وloop.connect_write_pipe()با پروندههای معمولی استفاده کرد. برای دیدن اشیایی که در هر سکو پذیرفته میشوند، اشیای پایپ پشتیبانیشده را ببینید.
ویندوز¶
کد منبع: Lib/asyncio/proactor_events.py, Lib/asyncio/windows_events.py, Lib/asyncio/windows_utils.py
تغییر یافته در نسخهی 3.8: در ویندوز، ProactorEventLoop اکنون حلقه رویداد پیشفرض است.
تمام حلقههای رویداد در ویندوز از متدهای زیر پشتیبانی نمیکنند:
از
loop.create_unix_connection()وloop.create_unix_server()پشتیبانی نمیشود. خانوادهی سوکتsocket.AF_UNIXمخصوص یونیکس است.loop.add_signal_handler()وloop.remove_signal_handler()پشتیبانی نمیشوند.
SelectorEventLoop محدودیتهای زیر را دارد:
SelectSelectorبرای انتظار برای رویدادهای سوکت به کار میرود: از سوکتها پشتیبانی میکند و به ۵۱۲ سوکت محدود است.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()پشتیبانی نمیشوند.loop.connect_read_pipe()وloop.connect_write_pipe()فقط دستهای را میپذیرند که برای ورودی/خروجی همپوشانیشده (overlapped I/O) بازشده باشد. برای اینکه بدانید کدام اشیاء پشتیبانی میشوند، اشیاء پایپ پشتیبانیشده را ببینید.
دقت ساعت یکنواخت (monotonic clock) در ویندوز معمولاً حدود ۱۵٫۶ میلیثانیه است. بهترین دقت ۰٫۵ میلیثانیه است. دقت به سختافزار (دسترسپذیری HPET) و پیکربندی ویندوز بستگی دارد.
پشتیبانی از زیرفرایند در ویندوز¶
در ویندوز، حلقه رویداد پیشفرض ProactorEventLoop از زیرفرآیندها پشتیبانی میکند، در حالی که SelectorEventLoop پشتیبانی نمیکند.
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)