我正在使用以下类运行Tornado服务器:
class SessionHandler(tornado.websocket.WebSocketHandler):
def open(self):
pass
def on_close(self):
pass
@tornado.gen.coroutine
def on_message(self,message):
#db added to the tornado application object on init
self.application.db.add("test")
x=self.application.db.get("test")
print(x)
get函数如下(db类的一部分):
@tornado.gen.coroutine
def get(self,key):
result=[]
lookup=yield self.postCol.find_one({"_id":key})
if not lookup:
return result
for id in lookup["FieldArray"]:
ob=yield self.postCol.find_one({"_id":ObjectId(id)})
result.append(ob)
return result
我不会输出add()
功能。
我意识到get()
会返回 Future 对象而不是数组。没关系,我意识到我需要将代码更改为x = yield self.application.db.get("test")
。
我的问题是add()
函数在我的方法中没有明确的 return 值?
我还需要屈服,当我把它称为I.e. yield self.application.db.add("test")
?
它目前在没有让我屈服的情况下工作,但是我想知道不 屈服这是错误的,因为我知道它确实会返回 Future < / strong>对象?
如果是这种情况,这是否意味着我基本上必须 yield 我用 gen.coroutine 装饰的任何方法?
答案 0 :(得分:1)
是的,你应该“产生”对协程的任何调用。有两个原因: