【发布时间】:2014-02-07 12:25:44
【问题描述】:
为什么传入的请求没有被处理,而另一个请求处于“等待”状态?
如果你看下面的代码,函数“get”有一个用“yield”关键字执行的龙卷风任务,这意味着“等待回调被执行”。在我的代码中,回调永远不会执行。如果您第二次运行请求,而第一次处于暂停状态,则不会处理第二次请求。如果您运行任何其他请求,它们会得到很好的处理。
所以,我的行动: 1. 开始申请 2. 获取本地主机:8080/ - 应用程序正在打印输出“来电” 3. 获取 localhost:8080/anotherrequest - 应用程序正在打印输出“另一个请求” 4. 获取本地主机:8080/ - 应用程序没有打印任何输出,而我希望它打印“来电”。为什么?
那么,为什么这段代码会被阻塞?附上代码示例。
我使用 tornado 2.1 和 python 2.7 来运行这个示例。
谢谢
import tornado
import tornado.web
from tornado import gen
class AnotherHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
print 'another request'
self.finish()
class MainHandler(tornado.web.RequestHandler):
def printStuff(*args, **kwargs):
print 'incoming call'
@tornado.web.asynchronous
@tornado.gen.engine
def get(self):
result = yield tornado.gen.Task(self.printStuff);
application = tornado.web.Application([
(r"/", MainHandler),
(r"/anotherrequest", AnotherHandler)
])
if __name__ == "__main__":
application.listen(8080)
tornado.ioloop.IOLoop.instance().start()
【问题讨论】:
标签: python python-2.7 asynchronous tornado yield