Spaces:
Running on Zero
Running on Zero
| ::: currentmodule | |
| asyncio | |
| ::: | |
| # Policies {#asyncio-policies} | |
| :::: warning | |
| ::: title | |
| Warning | |
| ::: | |
| Policies are deprecated and will be removed in Python 3.16. Users are encouraged to use the `asyncio.run`{.interpreted-text role="func"} function or the `asyncio.Runner`{.interpreted-text role="class"} with *loop_factory* to use the desired loop implementation. | |
| :::: | |
| An event loop policy is a global object used to get and set the current `event loop <asyncio-event-loop>`{.interpreted-text role="ref"}, as well as create new event loops. The default policy can be `replaced <asyncio-policy-get-set>`{.interpreted-text role="ref"} with `built-in alternatives <asyncio-policy-builtin>`{.interpreted-text role="ref"} to use different event loop implementations, or substituted by a `custom policy <asyncio-custom-policies>`{.interpreted-text role="ref"} that can override these behaviors. | |
| The `policy object <asyncio-policy-objects>`{.interpreted-text role="ref"} gets and sets a separate event loop per *context*. This is per-thread by default, though custom policies could define *context* differently. | |
| Custom event loop policies can control the behavior of `get_event_loop`{.interpreted-text role="func"}, `set_event_loop`{.interpreted-text role="func"}, and `new_event_loop`{.interpreted-text role="func"}. | |
| Policy objects should implement the APIs defined in the `AbstractEventLoopPolicy`{.interpreted-text role="class"} abstract base class. | |
| ## Getting and Setting the Policy {#asyncio-policy-get-set} | |
| The following functions can be used to get and set the policy for the current process: | |
| :::: function | |
| get_event_loop_policy() | |
| Return the current process-wide policy. | |
| ::: deprecated | |
| 3.14 The `get_event_loop_policy`{.interpreted-text role="func"} function is deprecated and will be removed in Python 3.16. | |
| ::: | |
| :::: | |
| :::: function | |
| set_event_loop_policy(policy) | |
| Set the current process-wide policy to *policy*. | |
| If *policy* is set to `None`, the default policy is restored. | |
| ::: deprecated | |
| 3.14 The `set_event_loop_policy`{.interpreted-text role="func"} function is deprecated and will be removed in Python 3.16. | |
| ::: | |
| :::: | |
| ## Policy Objects {#asyncio-policy-objects} | |
| The abstract event loop policy base class is defined as follows: | |
| :::::::: AbstractEventLoopPolicy | |
| An abstract base class for asyncio policies. | |
| :::: method | |
| get_event_loop() | |
| Get the event loop for the current context. | |
| Return an event loop object implementing the `AbstractEventLoop`{.interpreted-text role="class"} interface. | |
| This method should never return `None`. | |
| ::: versionchanged | |
| 3.6 | |
| ::: | |
| :::: | |
| ::: method | |
| set_event_loop(loop) | |
| Set the event loop for the current context to *loop*. | |
| ::: | |
| ::: method | |
| new_event_loop() | |
| Create and return a new event loop object. | |
| This method should never return `None`. | |
| ::: | |
| ::: deprecated | |
| 3.14 The `AbstractEventLoopPolicy`{.interpreted-text role="class"} class is deprecated and will be removed in Python 3.16. | |
| ::: | |
| :::::::: | |
| ::: {#asyncio-policy-builtin} | |
| asyncio ships with the following built-in policies: | |
| ::: | |
| :::::: DefaultEventLoopPolicy | |
| The default asyncio policy. Uses `SelectorEventLoop`{.interpreted-text role="class"} on Unix and `ProactorEventLoop`{.interpreted-text role="class"} on Windows. | |
| There is no need to install the default policy manually. asyncio is configured to use the default policy automatically. | |
| ::: versionchanged | |
| 3.8 | |
| On Windows, `ProactorEventLoop`{.interpreted-text role="class"} is now used by default. | |
| ::: | |
| ::: versionchanged | |
| 3.14 The `get_event_loop`{.interpreted-text role="meth"} method of the default asyncio policy now raises a `RuntimeError`{.interpreted-text role="exc"} if there is no set event loop. | |
| ::: | |
| ::: deprecated | |
| 3.14 The `DefaultEventLoopPolicy`{.interpreted-text role="class"} class is deprecated and will be removed in Python 3.16. | |
| ::: | |
| :::::: | |
| ::::: WindowsSelectorEventLoopPolicy | |
| An alternative event loop policy that uses the `SelectorEventLoop`{.interpreted-text role="class"} event loop implementation. | |
| ::: availability | |
| Windows. | |
| ::: | |
| ::: deprecated | |
| 3.14 The `WindowsSelectorEventLoopPolicy`{.interpreted-text role="class"} class is deprecated and will be removed in Python 3.16. | |
| ::: | |
| ::::: | |
| ::::: WindowsProactorEventLoopPolicy | |
| An alternative event loop policy that uses the `ProactorEventLoop`{.interpreted-text role="class"} event loop implementation. | |
| ::: availability | |
| Windows. | |
| ::: | |
| ::: deprecated | |
| 3.14 The `WindowsProactorEventLoopPolicy`{.interpreted-text role="class"} class is deprecated and will be removed in Python 3.16. | |
| ::: | |
| ::::: | |
| ## Custom Policies {#asyncio-custom-policies} | |
| To implement a new event loop policy, it is recommended to subclass `DefaultEventLoopPolicy`{.interpreted-text role="class"} and override the methods for which custom behavior is wanted, e.g.: | |
| 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()) | |