这是一个post处理程序:
handler.py
from imports import logic
@gen.coroutine
def post(self):
data = self.request.body.decode('utf-8')
params = json.loads(data)
model_id= params['model_id']
logic.begin(model_id)logic对象从imports.py导入,其中它是从导入的类Logic实例化的。
imports.py :
import Models
import Logic
class Persist(object):
def getModel(self, model_id):
model = Models.findByModelId(model_id)
return model
persist = Persist()
logic = Logic(persist)logic.py
class Logic(object):
def __init__(self, persist):
self._persist = persist
def begin(self, model_id):
model = self._persist.get_model(model_id)
print ("Model from persist : ")
print (model)get_model方法使用Models进行DB查询并返回未来的对象:
model.py
from motorengine.document import Document
class Models(Document):
name = StringField(required=True)
def findByModelId(model_id):
return Models.objects.filter(_id=ObjectId(model_id)).find_all()这将在控制台中打印未来的对象:
<tornado.concurrent.Future object at 0x7fbb147047b8>怎么才能把它转换成json呢?
发布于 2015-08-17 02:53:32
若要将Future解析为实际值,请将其放入协同线中:
@gen.coroutine
def begin(self, model_id):
model = yield self._persist.get_model(model_id)
print ("Model from persist : ")
print (model)任何调用coroutine的函数都必须是coroutine,并且它必须yield该coroutine的返回值才能得到它的返回值:
@gen.coroutine
def post(self):
data = self.request.body.decode('utf-8')
params = json.loads(data)
model_id = params['model_id']
model = yield logic.begin(model_id)
print(model)更高级的编码模式不需要遵循这些规则,但是首先,遵循这些基本规则。
有关从协同线调用协同线的更多信息,请参见重构龙卷风协同线。
https://stackoverflow.com/questions/32039646
复制相似问题