### Navigation
- [index](# "General Index")
- [modules](# "Python Module Index") |
- [next](# "What鈥檚 new in Tornado 2.3") |
- [previous](# "What鈥檚 new in Tornado 2.4.1") |
- [Tornado 4.4.dev1 documentation](#) »
- [Release notes](#) »
# What's new in Tornado 2.4
### Sep 4, 2012
### General
- Fixed Python 3 bugs in [`tornado.auth`](# "tornado.auth"), [`tornado.locale`](# "tornado.locale"), and [`tornado.wsgi`](# "tornado.wsgi").
### HTTP clients
- Removed `max_simultaneous_connections` argument from [`tornado.httpclient`](# "tornado.httpclient")(both implementations). This argument hasn't been useful for some time(if you were using it you probably want `max_clients` instead)
- `tornado.simple_httpclient` now accepts and ignores HTTP 1xx statusresponses.
### [`tornado.ioloop`](# "tornado.ioloop") and [`tornado.iostream`](# "tornado.iostream")
- Fixed a bug introduced in 2.3 that would cause [`IOStream`](# "tornado.iostream.IOStream") close callbacksto not run if there were pending reads.
- Improved error handling in [`SSLIOStream`](# "tornado.iostream.SSLIOStream") and SSL-enabled [`TCPServer`](# "tornado.tcpserver.TCPServer").
- `SSLIOStream.get_ssl_certificate` now has a `binary_form` argumentwhich is passed to `SSLSocket.getpeercert`.
- `SSLIOStream.write` can now be called while the connection is in progress,same as non-SSL [`IOStream`](# "tornado.iostream.IOStream") (but be careful not to send sensitive data untilthe connection has completed and the certificate has been verified).
- [`IOLoop.add_handler`](# "tornado.ioloop.IOLoop.add_handler") cannot be called more than once with the same filedescriptor. This was always true for `epoll`, but now the otherimplementations enforce it too.
- On Windows, [`TCPServer`](# "tornado.tcpserver.TCPServer") uses `SO_EXCLUSIVEADDRUSER` instead of `SO_REUSEADDR`.
### [`tornado.template`](# "tornado.template")
- `{% break %}` and `{% continue %}` can now be used looping constructsin templates.
- It is no longer an error for an if/else/for/etc block in a template tohave an empty body.
### [`tornado.testing`](# "tornado.testing")
- New class [`tornado.testing.AsyncHTTPSTestCase`](# "tornado.testing.AsyncHTTPSTestCase") is like [`AsyncHTTPTestCase`](# "tornado.testing.AsyncHTTPTestCase").but enables SSL for the testing server (by default using a self-signedtesting certificate).
- [`tornado.testing.main`](# "tornado.testing.main") now accepts additional keyword arguments and forwardsthem to [`unittest.main`](https://docs.python.org/3.4/library/unittest.html#unittest.main "(in Python v3.4)") [https://docs.python.org/3.4/library/unittest.html#unittest.main].
### [`tornado.web`](# "tornado.web")
- New method [`RequestHandler.get_template_namespace`](# "tornado.web.RequestHandler.get_template_namespace") can be overridden toadd additional variables without modifying keyword arguments to`render_string`.
- [`RequestHandler.add_header`](# "tornado.web.RequestHandler.add_header") now works with [`WSGIApplication`](# "tornado.wsgi.WSGIApplication").
- [`RequestHandler.get_secure_cookie`](# "tornado.web.RequestHandler.get_secure_cookie") now handles a potential error case.
- `RequestHandler.__init__` now calls `super().__init__` to ensure thatall constructors are called when multiple inheritance is used.
- Docs have been updated with a description of all available[`Application settings`](# "tornado.web.Application.settings")
### Other modules
- [`OAuthMixin`](# "tornado.auth.OAuthMixin") now accepts `"oob"` as a `callback_uri`.
- [`OpenIdMixin`](# "tornado.auth.OpenIdMixin") now also returns the `claimed_id` field for the user.
- [`tornado.platform.twisted`](# "tornado.platform.twisted") shutdown sequence is now more compatible.
- The logging configuration used in [`tornado.options`](# "tornado.options") is now more tolerantof non-ascii byte strings.
© Copyright 2009-2016, The Tornado Authors. Created using [Sphinx](http://sphinx-doc.org/) 1.3.5.
- User's guide
- Introduction
- Asynchronous and non-Blocking I/O
- Coroutines
- Queue example - a concurrent web spider
- Structure of a Tornado web application
- Templates and UI
- Authentication and security
- Running and deploying
- Web framework
- tornado.web — RequestHandler and Application classes
- tornado.template — Flexible output generation
- tornado.escape — Escaping and string manipulation
- tornado.locale — Internationalization support
- tornado.websocket — Bidirectional communication to the browser
- HTTP servers and clients
- tornado.httpserver — Non-blocking HTTP server
- tornado.httpclient — Asynchronous HTTP client
- tornado.httputil — Manipulate HTTP headers and URLs
- tornado.http1connection – HTTP/1.x client/server implementation
- Asynchronous networking
- tornado.ioloop — Main event loop
- tornado.iostream — Convenient wrappers for non-blocking sockets
- tornado.netutil — Miscellaneous network utilities
- tornado.tcpclient — IOStream connection factory
- tornado.tcpserver — Basic IOStream-based TCP server
- Coroutines and concurrency
- tornado.gen — Simplify asynchronous code
- tornado.concurrent — Work with threads and futures
- tornado.locks – Synchronization primitives
- tornado.queues – Queues for coroutines
- tornado.process — Utilities for multiple processes
- Integration with other services
- tornado.auth — Third-party login with OpenID and OAuth
- tornado.wsgi — Interoperability with other Python frameworks and servers
- tornado.platform.asyncio — Bridge between asyncio and Tornado
- tornado.platform.caresresolver — Asynchronous DNS Resolver using C-Ares
- tornado.platform.twisted — Bridges between Twisted and Tornado
- Utilities
- tornado.autoreload — Automatically detect code changes in development
- tornado.log — Logging support
- tornado.options — Command-line parsing
- tornado.stack_context — Exception handling across asynchronous callbacks
- tornado.testing — Unit testing support for asynchronous code
- tornado.util — General-purpose utilities
- Frequently Asked Questions
- Release notes
- What's new in Tornado 4.3
- What's new in Tornado 4.2.1
- What's new in Tornado 4.2
- What's new in Tornado 4.1
- What's new in Tornado 4.0.2
- What's new in Tornado 4.0.1
- What's new in Tornado 4.0
- What's new in Tornado 3.2.2
- What's new in Tornado 3.2.1
- What's new in Tornado 3.2
- What's new in Tornado 3.1.1
- What's new in Tornado 3.1
- What's new in Tornado 3.0.2
- What's new in Tornado 3.0.1
- What's new in Tornado 3.0
- What's new in Tornado 2.4.1
- What's new in Tornado 2.4
- What's new in Tornado 2.3
- What's new in Tornado 2.2.1
- What's new in Tornado 2.2
- What's new in Tornado 2.1.1
- What's new in Tornado 2.1
- What's new in Tornado 2.0
- What's new in Tornado 1.2.1
- What's new in Tornado 1.2
- What's new in Tornado 1.1.1
- What's new in Tornado 1.1
- What's new in Tornado 1.0.1
- What's new in Tornado 1.0