问题描述
- tornado motor函数调用另一个异步操作Mongo数据库返回值是Future对象
- 我用motor在tornado框架下来操作mongodb,按照官方教学文档写的结果正常。
>>> @gen.coroutine... def do_find_one():... document = yield db.test_collection.find_one({'i': {'$lt': 2}})... print document...>>> IOLoop.current().run_sync(do_find_one){u'i': 0 u'_id': ObjectId('...')}
现在我想实现a.py调用b.py,然后在b.py里面用motor操作mongodb,例如是插入数据,然后返回_id给a.py。我的代码是这样写的:
a.pyfrom b import testbfrom tornado import ioloopfrom tornado import genclass testa(Object): @gen.coroutine def printa(self): tmp = testb() id = tmp.do_insert() print ida = testa()ioloop.IOLoop.current().run_sync(a.printa)
b.py
from tornado import genimport motorclient = motor.MotorClient('localhost' 27017)db = client.testdbclass testb(object): @gen.coroutine def do_insert(self): coll = db.testcoll yield coll.find_one({'bookname': 'huihuang'})
因为testb加了yield,生成器里面不能用return。我这种写法a.py中print出来的是一个
<tornado.concurrent.Future object at 0x7fa83c900e10>
我不知道怎么获得future里面的数据。
哪位大神帮我看看!或者我哪里理解错了
解决方案
已经解决,在被调用函数后面用gen.Return()返回,在调用函数那对返回的值再yield一次获得返回的值。
解决方案二:
js中一个函数获取另一个函数返回值问题探讨
js中一个函数获取另一个函数返回值问题
时间: 2024-11-02 12:06:52