我正在 python 3.4.3 中研究龙卷风和电机。
我得到了三个文件。让我们将其命名为main.py
, model.py
,core.py
我有三个功能,每个功能...
主文件
def getLoggedIn(request_handler):
# request_handler = tornado.web.RequestHandler()
db = request_handler.settings["db"]
uid = request_handler.get_secure_cookie("uid")
result = model.Session.get(db, uid=uid)
return result.get("_id", None) if result else None
模型.py
@classmethod
def get(cls, db, user_id=None, **kwargs):
session = core.Session(db)
return session.get(user_id, **kwargs)
核心.py
@gen.coroutine
def get(self, user_id, **kwargs):
params = kwargs
if user_id:
params.update({"_id": ObjectId(user_id)}) #This does not exist in DB
future = self.collection.find_one(params)
print(future) #prints <tornado.concurrent.Future object at 0x04152A90>
result = yield future
print(result) #prints None
return result
调用看起来像getLoggedIn
=> model.get
=> core.get
core.get 被装饰,@gen.coroutine
我调用Prints但如果我返回结果并尝试在函数中打印返回值,yield self.collection.find_one(params)
它print(result)
会打印。None
getLoggedIn
我相信这与龙卷风的异步性质有关,打印在产量之前被调用,但我不确定。如果有人可以解释协程/生成器在不同可能情况下的原理和行为,那将是一个很大的帮助。