Policies¶
警告
Policies are deprecated and will be removed in Python 3.16.Users are encouraged to use theasyncio.run()
functionor theasyncio.Runner
withloop_factory to usethe desired loop implementation.
An event loop policy is a global objectused to get and set the currentevent loop,as well as create new event loops.The default policy can bereplaced withbuilt-in alternativesto use different event loop implementations,or substituted by acustom policythat can override these behaviors.
Thepolicy objectgets and sets a separate event loop percontext.This is per-thread by default,though custom policies could definecontext differently.
Custom event loop policies can control the behavior ofget_event_loop()
,set_event_loop()
, andnew_event_loop()
.
Policy objects should implement the APIs definedin theAbstractEventLoopPolicy
abstract base class.
Getting and Setting the Policy¶
The following functions can be used to get and set the policyfor the current process:
- asyncio.get_event_loop_policy()¶
Return the current process-wide policy.
在 3.14 版之後被棄用:The
get_event_loop_policy()
function is deprecated andwill be removed in Python 3.16.
- asyncio.set_event_loop_policy(policy)¶
Set the current process-wide policy topolicy.
Ifpolicy is set to
None
, the default policy is restored.在 3.14 版之後被棄用:The
set_event_loop_policy()
function is deprecated andwill be removed in Python 3.16.
Policy Objects¶
The abstract event loop policy base class is defined as follows:
- classasyncio.AbstractEventLoopPolicy¶
An abstract base class for asyncio policies.
- get_event_loop()¶
Get the event loop for the current context.
Return an event loop object implementing the
AbstractEventLoop
interface.This method should never return
None
.在 3.6 版的變更.
- set_event_loop(loop)¶
Set the event loop for the current context toloop.
- new_event_loop()¶
Create and return a new event loop object.
This method should never return
None
.
在 3.14 版之後被棄用:The
AbstractEventLoopPolicy
class is deprecated andwill be removed in Python 3.16.
asyncio ships with the following built-in policies:
- classasyncio.DefaultEventLoopPolicy¶
The default asyncio policy. Uses
SelectorEventLoop
on Unix andProactorEventLoop
on Windows.There is no need to install the default policy manually. asynciois configured to use the default policy automatically.
在 3.8 版的變更:On Windows,
ProactorEventLoop
is now used by default.在 3.14 版的變更:The
get_event_loop()
method of the default asyncio policy nowraises aRuntimeError
if there is no set event loop.在 3.14 版之後被棄用:The
DefaultEventLoopPolicy
class is deprecated andwill be removed in Python 3.16.
- classasyncio.WindowsSelectorEventLoopPolicy¶
An alternative event loop policy that uses the
SelectorEventLoop
event loop implementation.可用性: Windows.
在 3.14 版之後被棄用:The
WindowsSelectorEventLoopPolicy
class is deprecated andwill be removed in Python 3.16.
- classasyncio.WindowsProactorEventLoopPolicy¶
An alternative event loop policy that uses the
ProactorEventLoop
event loop implementation.可用性: Windows.
在 3.14 版之後被棄用:The
WindowsProactorEventLoopPolicy
class is deprecated andwill be removed in Python 3.16.
Custom Policies¶
To implement a new event loop policy, it is recommended to subclassDefaultEventLoopPolicy
and override the methods for whichcustom behavior is wanted, e.g.:
classMyEventLoopPolicy(asyncio.DefaultEventLoopPolicy):defget_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 ...returnloopasyncio.set_event_loop_policy(MyEventLoopPolicy())