if isinstance(deadline, (int, long, float)):
self.deadline = deadline
elif isinstance(deadline, datetime.timedelta):
- self.deadline = time.time() + deadline.total_seconds()
+ self.deadline = time.time() + _Timeout.timedelta_to_seconds(deadline)
else:
raise TypeError("Unsupported deadline %r" % deadline)
self.callback = callback
+ @staticmethod
+ def timedelta_to_seconds(td):
+ """Equivalent to td.total_seconds() (introduced in python 2.7)."""
+ return (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / float(10**6)
+
# Comparison methods to sort by deadline, with object id as a tiebreaker
# to guarantee a consistent ordering. The heapq module uses __le__
# in python2.5, and __lt__ in 2.6+ (sort() and most other comparisons
#!/usr/bin/env python
+import datetime
import unittest
import time
self.assertAlmostEqual(time.time(), self.start_time, places=2)
self.assertTrue(self.called)
+ def test_add_timeout_timedelta(self):
+ self.io_loop.add_timeout(datetime.timedelta(microseconds=1), self.stop)
+ self.wait()
+
if __name__ == "__main__":
unittest.main()