18.5.2. Event loops

18.5.2.1. Event loop functions

The following functions are convenient shortcuts to accessing the methods of theglobal policy. Note that this provides access to the default policy, unless analternative policy was set by callingset_event_loop_policy() earlier inthe execution of the process.

asyncio.get_event_loop()

Equivalent to callingget_event_loop_policy().get_event_loop().

asyncio.set_event_loop(loop)

Equivalent to callingget_event_loop_policy().set_event_loop(loop).

asyncio.new_event_loop()

Equivalent to callingget_event_loop_policy().new_event_loop().

18.5.2.2. Available event loops

asyncio currently provides two implementations of event loops:SelectorEventLoop andProactorEventLoop.

classasyncio.SelectorEventLoop

Event loop based on theselectors module. Subclass ofAbstractEventLoop.

Use the most efficient selector available on the platform.

On Windows, only sockets are supported (ex: pipes are not supported):see theMSDN documentation of select.

classasyncio.ProactorEventLoop

Proactor event loop for Windows using “I/O Completion Ports” aka IOCP.Subclass ofAbstractEventLoop.

Availability: Windows.

Example to use aProactorEventLoop on Windows:

importasyncio,sysifsys.platform=='win32':loop=asyncio.ProactorEventLoop()asyncio.set_event_loop(loop)

18.5.2.3. Platform support

Theasyncio module has been designed to be portable, but each platformstill has subtle differences and may not support allasyncio features.

18.5.2.3.1. Windows

Common limits of Windows event loops:

SelectorEventLoop specific limits:

ProactorEventLoop specific limits:

The resolution of the monotonic clock on Windows is usually around 15.6 msec.The best resolution is 0.5 msec. The resolution depends on the hardware(availability ofHPET) and on the Windowsconfiguration. Seeasyncio delayed calls.

Changed in version 3.5:ProactorEventLoop now supports SSL.

18.5.2.3.2. Mac OS X

Character devices like PTY are only well supported since Mavericks (Mac OS10.9). They are not supported at all on Mac OS 10.5 and older.

On Mac OS 10.6, 10.7 and 10.8, the default event loop isSelectorEventLoop which usesselectors.KqueueSelector.selectors.KqueueSelector does not support character devices on theseversions. TheSelectorEventLoop can be used withSelectSelector orPollSelector tosupport character devices on these versions of Mac OS X. Example:

importasyncioimportselectorsselector=selectors.SelectSelector()loop=asyncio.SelectorEventLoop(selector)asyncio.set_event_loop(loop)

18.5.2.4. Event loop policies and the default policy

Event loop management is abstracted with apolicy pattern, to provide maximalflexibility for custom platforms and frameworks. Throughout the execution of aprocess, a single global policy object manages the event loops available to theprocess based on the calling context. A policy is an object implementing theAbstractEventLoopPolicy interface.

For most users ofasyncio, policies never have to be dealt withexplicitly, since the default global policy is sufficient.

The default policy defines context as the current thread, and manages an eventloop per thread that interacts withasyncio. The module-level functionsget_event_loop() andset_event_loop() provide convenient access toevent loops managed by the default policy.

18.5.2.5. Event loop policy interface

An event loop policy must implement the following interface:

classasyncio.AbstractEventLoopPolicy

Event loop policy.

get_event_loop()

Get the event loop for the current context.

Returns an event loop object implementing theAbstractEventLoopinterface.

Raises an exception in case no event loop has been set for the currentcontext and the current policy does not specify to create one. It mustnever returnNone.

set_event_loop(loop)

Set the event loop for the current context toloop.

new_event_loop()

Create and return a new event loop object according to this policy’srules.

If there’s need to set this loop as the event loop for the currentcontext,set_event_loop() must be called explicitly.

18.5.2.6. Access to the global loop policy

asyncio.get_event_loop_policy()

Get the current event loop policy.

asyncio.set_event_loop_policy(policy)

Set the current event loop policy. Ifpolicy isNone, the defaultpolicy is restored.