From: Ben Darnell Date: Sun, 20 Apr 2014 00:13:40 +0000 (-0400) Subject: Timeout micro-optimizations. X-Git-Tag: v4.0.0b1~91^2~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5faab93af7d2b857c862fefb9f595d86276d1322;p=thirdparty%2Ftornado.git Timeout micro-optimizations. Use the (C) timedelta.total_seconds function when available. But it's still a bit faster to use numeric timeouts instead of back-and-forth through timedelta, so do that instead in http1connection. --- diff --git a/tornado/http1connection.py b/tornado/http1connection.py index 5c50fad00..787003c86 100644 --- a/tornado/http1connection.py +++ b/tornado/http1connection.py @@ -124,7 +124,7 @@ class HTTP1Connection(object): else: try: header_data = yield gen.with_timeout( - datetime.timedelta(seconds=self._header_timeout), + self.stream.io_loop.time() + self._header_timeout, header_future, io_loop=self.stream.io_loop) except gen.TimeoutError: diff --git a/tornado/ioloop.py b/tornado/ioloop.py index 77fb46591..208db8853 100644 --- a/tornado/ioloop.py +++ b/tornado/ioloop.py @@ -831,7 +831,11 @@ class _Timeout(object): if isinstance(deadline, numbers.Real): self.deadline = deadline elif isinstance(deadline, datetime.timedelta): - self.deadline = io_loop.time() + _Timeout.timedelta_to_seconds(deadline) + now = io_loop.time() + try: + self.deadline = now + deadline.total_seconds() + except AttributeError: # py2.6 + self.deadline = now + _Timeout.timedelta_to_seconds(deadline) else: raise TypeError("Unsupported deadline %r" % deadline) self.callback = callback