# `tornado.platform.asyncio` — Bridge between `asyncio` and Tornado

Bridges between the `asyncio` module and Tornado IOLoop.

New 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 requires the `add_reader` family of methods, so it is not compatible with the `ProactorEventLoop` on Windows. Use the `SelectorEventLoop` instead.

class `tornado.platform.asyncio.``AsyncIOMainLoop`

  `AsyncIOMainLoop` creates an `IOLoop` that corresponds to the current `asyncio` event loop (i.e. the one returned by `asyncio.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`

  `AsyncIOLoop` is an `IOLoop` that runs on an `asyncio` event loop. This class follows the usual Tornado semantics for creating new `IOLoops`; these loops are not necessarily related to the `asyncio` default event loop.

  Each `AsyncIOLoop` creates a new `asyncio.EventLoop`; this object can be accessed with the `asyncio_loop` attribute.

  Changed in version 5.0: When an `AsyncIOLoop` becomes the current `IOLoop`, it also sets the current `asyncio` 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)

  Convert an `asyncio.Future` to a `tornado.concurrent.Future`.

  New in version 4.1.

  Deprecated since version 5.0: Tornado `Futures` have been merged with `asyncio.Future`, so this method is now a no-op.

`tornado.platform.asyncio.``to_asyncio_future`(tornado_future)

  Convert a Tornado yieldable object to an `asyncio.Future`.

  New 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 with `asyncio.Future`, so this method is now equivalent to `tornado.gen.convert_yielded`.

class `tornado.platform.asyncio.``AnyThreadEventLoopPolicy`

  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 or `asyncio.get_event_loop` (and therefore `IOLoop.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())

  New in version 5.0.