Tornado time.sleep() replacement
Just decide to check is it works as I consider.
import datetime
import logging
import time
from tornado import web, ioloop, gen, options
logger = logging.getLogger(__name__)
class MainHandler(web.RequestHandler):
@gen.coroutine
def sleep(self, seconds):
yield gen.Task(
ioloop.IOLoop.current().add_timeout,
deadline=datetime.timedelta(seconds=seconds))
@gen.coroutine
def get(self):
# self.finish()
for i in xrange(5):
logger.warning('Hello {i}'.format(i=i))
# time.sleep(1)
yield self.sleep(seconds=1)
application = web.Application([
(r'/', MainHandler),
], debug=True)
if __name__ == "__main__":
options.parse_command_line()
application.listen(5000)
ioloop.IOLoop.instance().start()
Output:
time.sleep()
[W 141206 15:53:34 tornado_sleep:17] Hello 0
[W 141206 15:53:35 tornado_sleep:17] Hello 1
[W 141206 15:53:36 tornado_sleep:17] Hello 2
[W 141206 15:53:37 tornado_sleep:17] Hello 3
[W 141206 15:53:38 tornado_sleep:17] Hello 4
[I 141206 15:53:39 web:1635] 200 GET / (::1) 5012.27ms
[W 141206 15:53:39 tornado_sleep:17] Hello 0
[W 141206 15:53:40 tornado_sleep:17] Hello 1
[W 141206 15:53:41 tornado_sleep:17] Hello 2
[W 141206 15:53:42 tornado_sleep:17] Hello 3
[W 141206 15:53:43 tornado_sleep:17] Hello 4
[I 141206 15:53:44 web:1635] 200 GET / (::1) 5014.00ms
self.sleep()
[W 141206 15:54:35 tornado_sleep:17] Hello 0
[W 141206 15:54:36 tornado_sleep:17] Hello 1
[W 141206 15:54:36 tornado_sleep:17] Hello 0
[W 141206 15:54:37 tornado_sleep:17] Hello 2
[W 141206 15:54:37 tornado_sleep:17] Hello 1
[W 141206 15:54:38 tornado_sleep:17] Hello 3
[W 141206 15:54:38 tornado_sleep:17] Hello 2
[W 141206 15:54:39 tornado_sleep:17] Hello 4
[W 141206 15:54:39 tornado_sleep:17] Hello 3
[I 141206 15:54:40 web:1635] 200 GET / (::1) 5038.38ms
[W 141206 15:54:40 tornado_sleep:17] Hello 4
[I 141206 15:54:41 web:1635] 200 GET / (::1) 5033.03ms
Licensed under CC BY-SA 3.0