PyComp / python_doc_md /Intermediate /library /asyncio-policy.md
ITookAPill's picture
PyComp First Commit
9273228
|
Raw
History Blame Contribute Delete
5.13 kB

A newer version of the Gradio SDK is available: 6.20.0

Upgrade

::: 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())