سیاست‌ها

هشدار

سیاست‌ها منسوخ شده‌اند و در Python 3.16 حذف خواهند شد. به کاربران توصیه می‌شود برای استفاده از پیاده‌سازی حلقه مورد نظر، از تابع asyncio.run() یا asyncio.Runner همراه با loop_factory استفاده کنند.

سیاست حلقه رویداد یک شیء سراسری است که برای دریافت و تنظیم حلقه رویداد جاری، و همچنین ایجاد حلقه‌های رویداد جدید استفاده می‌شود. سیاست پیش‌فرض را می‌توان با جایگزین‌های توکار جایگزین کرد تا از پیاده‌سازی‌های مختلف حلقه رویداد استفاده شود، یا با یک سیاست سفارشی که می‌تواند این رفتارها را بازنویسی کند، جایگزین نمود.

شیء سیاست یک حلقه رویداد جداگانه را به ازای هر زمینه دریافت و تنظیم می‌کند. این حالت به‌طور پیش‌فرض به ازای هر نخ است، هرچند سیاست‌های سفارشی می‌توانند زمینه را به شکل متفاوتی تعریف کنند.

سیاست‌های سفارشی حلقه رویداد می‌توانند رفتار get_event_loop()، set_event_loop() و new_event_loop() را کنترل کنند.

اشیای سیاست باید APIهای تعریف‌شده در کلاس پایه انتزاعی AbstractEventLoopPolicy را پیاده‌سازی کنند.

دریافت و تنظیم سیاست

می‌توان از توابع زیر برای دریافت و تنظیم سیاست فرایند جاری استفاده کرد:

asyncio.get_event_loop_policy()

سیاست فعلی در سطح فرایند را برمی‌گرداند.

منسوخ شده از نسخه‌ی 3.14: تابع get_event_loop_policy() منسوخ شده است و در Python 3.16 حذف خواهد شد.

asyncio.set_event_loop_policy(policy)

سیاست سراسری فعلی فرایند را روی policy تنظیم کنید.

اگر policy روی None تنظیم شود، سیاست پیش‌فرض بازیابی می‌شود.

منسوخ شده از نسخه‌ی 3.14: تابع set_event_loop_policy() منسوخ شده است و در پایتون 3.16 حذف خواهد شد.

اشیاء سیاست

کلاس پایه‌ی انتزاعی سیاست حلقه رویداد به‌صورت زیر تعریف شده است:

class asyncio.AbstractEventLoopPolicy

یک کلاس پایه انتزاعی برای سیاست‌های asyncio.

get_event_loop()

حلقه رویداد را برای زمینه جاری دریافت کنید.

یک شیء حلقه رویداد را که رابط AbstractEventLoop را پیاده‌سازی می‌کند، برمی‌گرداند.

این متد هرگز نباید None را برگرداند.

تغییر یافته در نسخه‌ی 3.6.

set_event_loop(loop)

حلقه رویداد را برای زمینه فعلی روی loop تنظیم کنید.

new_event_loop()

یک شیء حلقه رویداد جدید را ایجاد و برمی‌گرداند.

این متد هرگز نباید None را برگرداند.

منسوخ شده از نسخه‌ی 3.14: کلاس AbstractEventLoopPolicy منسوخ شده است و در Python 3.16 حذف خواهد شد.

asyncio با سیاست‌های توکار زیر ارائه می‌شود:

class asyncio.DefaultEventLoopPolicy

سیاست پیش‌فرض asyncio. از SelectorEventLoop در یونیکس و ProactorEventLoop در ویندوز استفاده می‌کند.

نیازی نیست سیاست پیش‌فرض را به‌صورت دستی نصب کنید. asyncio به‌گونه‌ای پیکربندی شده است که به‌طور خودکار از سیاست پیش‌فرض استفاده کند.

تغییر یافته در نسخه‌ی 3.8: در ویندوز، ProactorEventLoop اکنون به‌طور پیش‌فرض استفاده می‌شود.

تغییر یافته در نسخه‌ی 3.14: متد get_event_loop() سیاست پیش‌فرض asyncio اکنون در صورتی که حلقه رویدادی تنظیم نشده باشد، استثنای RuntimeError را پرتاب می‌کند.

منسوخ شده از نسخه‌ی 3.14: کلاس DefaultEventLoopPolicy منسوخ شده است و در پایتون 3.16 حذف خواهد شد.

class asyncio.WindowsSelectorEventLoopPolicy

یک سیاست جایگزین حلقه رویداد که از پیاده‌سازی حلقه رویداد SelectorEventLoop استفاده می‌کند.

منسوخ شده از نسخه‌ی 3.14: کلاس WindowsSelectorEventLoopPolicy منسوخ‌شده است و در پایتون 3.16 حذف خواهد شد.

class asyncio.WindowsProactorEventLoopPolicy

یک سیاست جایگزین حلقه رویداد که از پیاده‌سازی حلقه رویداد ProactorEventLoop استفاده می‌کند.

منسوخ شده از نسخه‌ی 3.14: کلاس WindowsProactorEventLoopPolicy منسوخ شده است و در پایتون 3.16 حذف خواهد شد.

سیاست‌های سفارشی

برای پیاده‌سازی یک سیاست جدید حلقه رویداد، توصیه می‌شود زیرکلاسی از DefaultEventLoopPolicy ایجاد کنید و متدهایی را که رفتار سفارشی برای آن‌ها مطلوب است بازنویسی کنید، برای مثال:

class MyEventLoopPolicy(asyncio.DefaultEventLoopPolicy):

    def get_event_loop(self):
        """Get the event loop.

        This may be None or an instance of EventLoop.
        """
        loop = super().get_event_loop()
        # Do something with loop ...
        return loop

asyncio.set_event_loop_policy(MyEventLoopPolicy())