سیاستها¶
هشدار
سیاستها منسوخ شدهاند و در 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استفاده میکند.دسترسپذیری: Windows.
منسوخ شده از نسخهی 3.14: کلاس
WindowsSelectorEventLoopPolicyمنسوخشده است و در پایتون 3.16 حذف خواهد شد.
- class asyncio.WindowsProactorEventLoopPolicy¶
یک سیاست جایگزین حلقه رویداد که از پیادهسازی حلقه رویداد
ProactorEventLoopاستفاده میکند.دسترسپذیری: Windows.
منسوخ شده از نسخهی 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())