Message from discussion
How to call tornado asynchronous function right?
Received: by 10.236.78.199 with SMTP id g47mr517787yhe.0.1349228017372;
Tue, 02 Oct 2012 18:33:37 -0700 (PDT)
X-BeenThere: python-tornado@googlegroups.com
Received: by 10.236.120.244 with SMTP id p80ls1783720yhh.0.gmail; Tue, 02 Oct
2012 18:33:35 -0700 (PDT)
Received: by 10.236.118.82 with SMTP id k58mr50502yhh.1.1349228015057;
Tue, 02 Oct 2012 18:33:35 -0700 (PDT)
Date: Tue, 2 Oct 2012 18:33:33 -0700 (PDT)
From: "A. Jesse Jiryu Davis" <ajesseda...@gmail.com>
To: python-tornado@googlegroups.com
Message-Id: <cd0872a3-ee4f-4913-abde-8cce420807b5@googlegroups.com>
In-Reply-To: <8e2a8f0d-aa90-4948-abf5-b9d9d5d5eb0f@p22g2000vby.googlegroups.com>
References: <296be41f-1894-4250-be3d-1a2238038d79@googlegroups.com>
<8e2a8f0d-aa90-4948-abf5-b9d9d5d5eb0f@p22g2000vby.googlegroups.com>
Subject: Re: How to call tornado asynchronous function right?
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_731_25720626.1349228013263"
------=_Part_731_25720626.1349228013263
Content-Type: multipart/alternative;
boundary="----=_Part_732_4817866.1349228013264"
------=_Part_732_4817866.1349228013264
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
Do this:
http://emptysquare.net/blog/pausing-with-tornado/
Tornado isn't magic. If you call sleep(), it'll pause your whole process.
You must explicitly return control to the IOLoop to allow it to continue
processing requests.
On Tuesday, October 2, 2012 5:51:54 PM UTC-4, aliane abdelouahab wrote:
>
> look here, maybe it will help:
>
> http://groups.google.com/group/python-tornado/browse_thread/thread/ae9b7527bf3d8948
>
> On 2 oct, 11:08, Li jiaming <li.jiam...@gmail.com> wrote:
> > I created a simple app with gen.task. But seems doesn't work
> > asynchronously. I try to call /sleep for multiple times, but it handles
> > request in sequence.
> >
> > import tornado.ioloop
> > import tornado.web
> > from tornado.web import asynchronous
> > from tornado import gen
> > import time
> > import tornado.httpserver
> >
> > class MainHandler(tornado.web.RequestHandler):
> > def get(self):
> > print 'receive root request'
> > self.write("Hello, world")
> >
> > class SleepHandler(tornado.web.RequestHandler):
> > @asynchronous
> > @gen.engine
> > def get(self):
> > print 'receive sleep request'
> > yield [ gen.Task(self.sleep, 10),
> > gen.Task(self.sleep, 9)]
> > self.write("Wake up")
> > self.finish()
> >
> > def sleep(self, sec, callback):
> > print 'sleep for %d seconds' % sec
> > time.sleep(sec)
> > print 'finish sleep %d' % sec
> > return callback()
> >
> > application = tornado.web.Application([
> > (r"/", MainHandler),
> > (r"/sleep", SleepHandler),
> > ])
> >
> > if __name__ == "__main__":
> > server = tornado.httpserver.HTTPServer(application)
> > server.listen(8888)
> > tornado.ioloop.IOLoop.instance().start()
> >
> > *Anything wrong in my code?*
> >
> > I also tried async_callback (which is claimed to be obsoleted way of
> doing
> > async). But it works. It can handle multiple requests in parallel when
> > calling /sleep.
> >
> > class SleepHandler(tornado.web.RequestHandler):
> > @asynchronous
> > def get(self):
> > print 'receive sleep request'
> > self.async_callback(self.callback_sleep, 10)
> >
> > def callback_sleep(self, sec):
> > print 'callback sleep for %d seconds' % sec
> > time.sleep(sec)
> > print 'finish callback sleep for %d seconds' % sec
> > self.write('wake up')
> > self.finish()
>
------=_Part_732_4817866.1349228013264
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 7bit
Do this:<br><br>http://emptysquare.net/blog/pausing-with-tornado/<br><br>Tornado isn't magic. If you call sleep(), it'll pause your whole process. You must explicitly return control to the IOLoop to allow it to continue processing requests.<br><br>On Tuesday, October 2, 2012 5:51:54 PM UTC-4, aliane abdelouahab wrote:<blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">look here, maybe it will help:
<br><a href="http://groups.google.com/group/python-tornado/browse_thread/thread/ae9b7527bf3d8948" target="_blank">http://groups.google.com/<wbr>group/python-tornado/browse_<wbr>thread/thread/ae9b7527bf3d8948</a>
<br>
<br>On 2 oct, 11:08, Li jiaming <<a>li.jiam...@gmail.com</a>> wrote:
<br>> I created a simple app with gen.task. But seems doesn't work
<br>> asynchronously. I try to call /sleep for multiple times, but it handles
<br>> request in sequence.
<br>>
<br>> import tornado.ioloop
<br>> import tornado.web
<br>> from tornado.web import asynchronous
<br>> from tornado import gen
<br>> import time
<br>> import tornado.httpserver
<br>>
<br>> class MainHandler(tornado.web.<wbr>RequestHandler):
<br>> def get(self):
<br>> print 'receive root request'
<br>> self.write("Hello, world")
<br>>
<br>> class SleepHandler(tornado.web.<wbr>RequestHandler):
<br>> @asynchronous
<br>> @gen.engine
<br>> def get(self):
<br>> print 'receive sleep request'
<br>> yield [ gen.Task(self.sleep, 10),
<br>> gen.Task(self.sleep, 9)]
<br>> self.write("Wake up")
<br>> self.finish()
<br>>
<br>> def sleep(self, sec, callback):
<br>> print 'sleep for %d seconds' % sec
<br>> time.sleep(sec)
<br>> print 'finish sleep %d' % sec
<br>> return callback()
<br>>
<br>> application = tornado.web.Application([
<br>> (r"/", MainHandler),
<br>> (r"/sleep", SleepHandler),
<br>> ])
<br>>
<br>> if __name__ == "__main__":
<br>> server = tornado.httpserver.HTTPServer(<wbr>application)
<br>> server.listen(8888)
<br>> tornado.ioloop.IOLoop.<wbr>instance().start()
<br>>
<br>> *Anything wrong in my code?*
<br>>
<br>> I also tried async_callback (which is claimed to be obsoleted way of doing
<br>> async). But it works. It can handle multiple requests in parallel when
<br>> calling /sleep.
<br>>
<br>> class SleepHandler(tornado.web.<wbr>RequestHandler):
<br>> @asynchronous
<br>> def get(self):
<br>> print 'receive sleep request'
<br>> self.async_callback(self.<wbr>callback_sleep, 10)
<br>>
<br>> def callback_sleep(self, sec):
<br>> print 'callback sleep for %d seconds' % sec
<br>> time.sleep(sec)
<br>> print 'finish callback sleep for %d seconds' % sec
<br>> self.write('wake up')
<br>> self.finish()
<br></blockquote>
------=_Part_732_4817866.1349228013264--
------=_Part_731_25720626.1349228013263--