【发布时间】:2015-06-14 22:35:16
【问题描述】:
我正在运行具有以下类的 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 值?
当我也调用它时,我还需要 yield 吗? yield self.application.db.add("test")?
它目前确实可以在没有我让步的情况下工作,但是我想知道 yield 是否是一个错误 not,因为我知道它确实返回了一个 Future 对象?
如果是这样的话,这是否意味着我基本上必须yield我调用的任何用gen.coroutine装饰的方法?
【问题讨论】: