--- /dev/null
+``tornado.platform.asyncio`` --- Bridge between ``asyncio`` and Tornado
+=======================================================================
+
+.. module:: tornado.platform.asyncio
+
+This module integrates Tornado with the ``asyncio`` module introduced
+in Python 3.4 (and available `as a separate download
+<https://pypi.python.org/pypi/asyncio>`_ for Python 3.3). This makes
+it possible to combine the two libraries on the same event loop.
+
+Most applications should use `AsyncIOMainLoop` to run Tornado on the
+default ``asyncio`` event loop. Applications that need to run event
+loops on multiple threads may use `AsyncIOLoop` to create multiple
+loops.
+
+.. py:class:: AsyncIOMainLoop
+
+ ``AsyncIOMainLoop`` creates an `.IOLoop` that corresponds to the
+ current ``asyncio`` event loop (i.e. the one returned by
+ ``asyncio.get_event_loop()``). Recommended usage::
+
+ from tornado.platform.asyncio import AsyncIOMainLoop
+ import asyncio
+ AsyncIOMainLoop().install()
+ asyncio.get_event_loop.run_forever()
+
+.. py:class:: 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. Recommended usage::
+
+ from tornado.ioloop import IOLoop
+ IOLoop.configure('tornado.platform.asyncio.AsyncIOLoop')
+ IOLoop.instance().start()
.. toctree::
auth
+ asyncio
caresresolver
twisted
websocket
* On Python 2.6, ``simple_httpclient`` now uses TLSv1 instead of SSLv3.
* Added `.GoogleOAuth2Mixin` support authentication to Google services
with OAuth 2 instead of OpenID and OAuth 1.
-* TODO: document asyncio and C extension module.
+* `.Application` now accepts 4-tuples to specify the ``name`` parameter
+ (which previously required constructing a `.URLSpec` object instead of
+ a tuple).
+* ``simple_httpclient`` now enforces the connect timeout during DNS resolution.
+* Tornado now depends on the `backports.ssl_match_hostname
+ <https://pypi.python.org/pypi/backports.ssl_match_hostname>`_ when
+ running on Python 2. This will be installed automatically when using ``pip``
+ or ``easy_install``
+* Tornado now includes an optional C extension module, which greatly improves
+ performance of websockets. This extension will be built automatically
+ if a C compiler is found at install time.
+* The `tornado.platform.asyncio` module provides integration with the
+ ``asyncio`` module introduced in Python 3.4.
+* Malformed ``x-www-form-urlencoded`` request bodies will now log a warning
+ and continue instead of causing the request to fail (similar to the existing
+ handling of malformed ``multipart/form-data`` bodies. This is done mainly
+ because some libraries send this content type by default even when the data
+ is not form-encoded.
or (regexp, request_class) tuples. When we receive requests, we
iterate over the list in order and instantiate an instance of the
first request class whose regexp matches the request path.
+ The request class can be specified as either a class object or a
+ (fully-qualified) name.
- Each tuple can contain an optional third element, which should be
- a dictionary if it is present. That dictionary is passed as
- keyword arguments to the contructor of the handler. This pattern
+ Each tuple can contain additional elements, which correspond to the
+ arguments to the `URLSpec` constructor. (Prior to Tornado 3.2, this
+ only tuples of two or three elements were allowed).
+
+ A dictionary may be passed as the third element of the tuple,
+ which will be used as keyword arguments to the handler's
+ constructor and `~RequestHandler.initialize` method. This pattern
is used for the `StaticFileHandler` in this example (note that a
`StaticFileHandler` can be installed automatically with the
static_path setting described below)::
and ``/robots.txt`` from the same directory. A custom subclass of
`StaticFileHandler` can be specified with the
``static_handler_class`` setting.
+
"""
def __init__(self, handlers=None, default_host="", transforms=None,
wsgi=False, **settings):