tornado.platform.asyncio
— Bridge between asyncio
and Tornado¶
Bridges between the asyncio
module and Tornado IOLoop.
Added in version 3.2.
This module integrates Tornado with the asyncio
module introduced
in Python 3.4. This makes it possible to combine the two libraries on
the same event loop.
Deprecated since version 5.0: While the code in this module is still used, it is now enabled
automatically when asyncio
is available, so applications should
no longer need to refer to this module directly.
Note
Tornado is designed to use a selector-based event loop. On Windows,
where a proactor-based event loop has been the default since Python 3.8,
a selector event loop is emulated by running select
on a separate thread.
Configuring asyncio
to use a selector event loop may improve performance
of Tornado (but may reduce performance of other asyncio
-based libraries
in the same process).
- class tornado.platform.asyncio.AsyncIOMainLoop(*args: Any, **kwargs: Any)[source]¶
AsyncIOMainLoop
creates anIOLoop
that corresponds to the currentasyncio
event loop (i.e. the one returned byasyncio.get_event_loop()
).Deprecated since version 5.0: Now used automatically when appropriate; it is no longer necessary to refer to this class directly.
Changed in version 5.0: Closing an
AsyncIOMainLoop
now closes the underlying asyncio loop.
- class tornado.platform.asyncio.AsyncIOLoop(*args: Any, **kwargs: Any)[source]¶
AsyncIOLoop
is anIOLoop
that runs on anasyncio
event loop. This class follows the usual Tornado semantics for creating newIOLoops
; these loops are not necessarily related to theasyncio
default event loop.Each
AsyncIOLoop
creates a newasyncio.EventLoop
; this object can be accessed with theasyncio_loop
attribute.Changed in version 6.2: Support explicit
asyncio_loop
argument for specifying the asyncio loop to attach to, rather than always creating a new one with the default policy.Changed in version 5.0: When an
AsyncIOLoop
becomes the currentIOLoop
, it also sets the currentasyncio
event loop.Deprecated since version 5.0: Now used automatically when appropriate; it is no longer necessary to refer to this class directly.
- tornado.platform.asyncio.to_tornado_future(asyncio_future: Future) Future [source]¶
Convert an
asyncio.Future
to atornado.concurrent.Future
.Added in version 4.1.
Deprecated since version 5.0: Tornado
Futures
have been merged withasyncio.Future
, so this method is now a no-op.
- tornado.platform.asyncio.to_asyncio_future(tornado_future: Future) Future [source]¶
Convert a Tornado yieldable object to an
asyncio.Future
.Added in version 4.1.
Changed in version 4.3: Now accepts any yieldable object, not just
tornado.concurrent.Future
.Deprecated since version 5.0: Tornado
Futures
have been merged withasyncio.Future
, so this method is now equivalent totornado.gen.convert_yielded
.
- class tornado.platform.asyncio.AnyThreadEventLoopPolicy[source]¶
Event loop policy that allows loop creation on any thread.
The default
asyncio
event loop policy only automatically creates event loops in the main threads. Other threads must create event loops explicitly orasyncio.get_event_loop
(and thereforeIOLoop.current
) will fail. Installing this policy allows event loops to be created automatically on any thread, matching the behavior of Tornado versions prior to 5.0 (or 5.0 on Python 2).Usage:
asyncio.set_event_loop_policy(AnyThreadEventLoopPolicy())
Added in version 5.0.
Deprecated since version 6.2:
AnyThreadEventLoopPolicy
affects the implicit creation of an event loop, which is deprecated in Python 3.10 and will be removed in a future version of Python. At that timeAnyThreadEventLoopPolicy
will no longer be useful. If you are relying on it, useasyncio.new_event_loop
orasyncio.run
explicitly in any non-main threads that need event loops.
- class tornado.platform.asyncio.SelectorThread(real_loop: AbstractEventLoop)[source]¶
Define
add_reader
methods to be called in a background select thread.Instances of this class start a second thread to run a selector. This thread is completely hidden from the user; all callbacks are run on the wrapped event loop’s thread.
Typically used via
AddThreadSelectorEventLoop
, but can be attached to a running asyncio loop.
- class tornado.platform.asyncio.AddThreadSelectorEventLoop(real_loop: AbstractEventLoop)[source]¶
Wrap an event loop to add implementations of the
add_reader
method family.Instances of this class start a second thread to run a selector. This thread is completely hidden from the user; all callbacks are run on the wrapped event loop’s thread.
This class is used automatically by Tornado; applications should not need to refer to it directly.
It is safe to wrap any event loop with this class, although it only makes sense for event loops that do not implement the
add_reader
family of methods themselves (i.e.WindowsProactorEventLoop
)Closing the
AddThreadSelectorEventLoop
also closes the wrapped event loop.