tornado motor函数调用另一个异步操作Mongo数据库返回值是Future对象

问题描述

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.py

from 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

tornado motor函数调用另一个异步操作Mongo数据库返回值是Future对象的相关文章

字符串-一个很基础的返回值问题

问题描述 一个很基础的返回值问题 想要打印字符串数组,去掉中间的空格和Tab,并且删除全为空的行,哪里有错?谢谢. #include #define MAXLINE 1000 int getline(char line[], int maxline); int copy(char to[],char from[]); int main(){ int len; int max; char line[MAXLINE]; max=0; while ((len=getline(line,MAXLINE)

const相关-为什么一个const属性的返回值可以用 非const 型来接受呢?

问题描述 为什么一个const属性的返回值可以用 非const 型来接受呢? const int func() { int j = 8; return j; } int main() {int i = 5 ;i = func(); } 为什么可以翻译通过呢? 解决方案 const int func() 说明函数func()的返回值是一个常数,不想让对象再次被修改,因为const一定是先被初始化的 而在主函数中的:i = func(),只能说明是将一个常数值赋值给一个变量,很正常啊!!! 还不懂的

java中一个void修饰的方法无返回值,那么有是不是返回一个空对象,有空对象这种说法吗

问题描述 java中一个void修饰的方法无返回值,那么有是不是返回一个空对象,有空对象这种说法吗 java中一个void修饰的方法无返回值,那么有是不是返回一个空对象,有空对象这种说法吗 解决方案 加入你有一个对象 Object 里面有个方法:public void method1(); 那你调用这个方法的时候就是 object.method1(); 那么这里就表示 没有返回值. 所以我里面的void就是 :没有返回值,这个方法不能做他用! 对比 有一个object 里面有一个方法: publ

Mongo数据库 安装

安装Mongo数据库: 在发布本文的时间官方提供的最新版本是:1.6.5 ,如果不做特殊声明,本教程所用的版本将会是这个版本. 第一步:下载安装包:如果是win系统,注意是64位还是32位版本的,请选择正确的版本. 第二步:新建目录"D:\MongoDB",解压下载到的安装包,找到bin目录下面全部.exe文件,拷贝到刚创建的目录下. 第三步:在"D:\MongoDB"目录下新建"data"文件夹,它将会作为数据存放的根文件夹. 注:官方下载地址

如何使用SQLyogEnt来建立一个简单的数据库

如果你选择PHP进行网站建设,那你必须懂得php建立数据库,那用mysql数据就是必须的了.刚接触php的朋友也许对这个mysql数据库很陌生,但如果有一款非常好用的数据库管理工具,那是用起来就方便多了,笔者几天就向大家介绍一款mysql的管理工具SQLyogEnt,笔者是用的 SQLyogEnt是英文版,目前好像没有中文版,由于功能强大,所以SQLyogEnt很受PHP用户的喜爱,接下就用实例来讲解下如何使用 SQLyogEnt来建立一个简单的数据库. 今天我建立的数据库名叫"mydb&quo

一个简单的数据库查询问题

问题描述 一个简单的数据库查询问题 一个文章表,一个评论表,通过文章的ID关联,现在要查出文章表中的一条数据和评论表中关于这篇文章的评论的个数,求帮忙 谢谢了. 解决方案 select w.*(select count(*) from 评论表 p where p.id=w.id ) as cnt from 文章表 w where w.id="" ""看明白不? 解决方案二: select w.neirong as 内容count(*) as 评论个数 from we

PHP实现的一个简单的数据库操作类

PHP实现的一个简单的数据库操作类 实现的功能: - 在实例化的时候能设置连接字符集 - 在实例化的时候能连接数据库 - 在实例化的时候能选择默认数据库 - 销毁对象时关闭数据库 代码如下: <?php // 数据库操作类MySQLDB class MySQLDB { // 声明属性 private $server; private $username; private $password; public $default_db; public $link; // 声明构造函数 public f

如何使用C#创建一个三层的数据库应用程序

程序|创建|数据|数据库 如何使用C#创建一个三层的数据库应用程序1.分析在我们这个程序中采用如下的层次:Web层,业务实体层,数据层.其中:业务实体层负责Web层与数据层之间的数据交换.数据层仅仅代表数据库.Web层通过业务实体层来访问数据库.我们的中间的业务实体层采用WebService.2.实例我们通过一个实例来学习三层架构.(1) 以sql2000为例建立TestUser数据库.表的sql脚本(在查询分析器中执行即可):/****** Object: Table [dbo].[Custo

介绍一个增强的数据库类CDataSet

因为MFC完全支持数据库应用程序的开发,所以大多数数据库应用都使用CDatabase和CRecordset类,并且类向导(Class Wizard)提供了快速简易的方式来使用这两个类.有一点不足的就是当应用程序涉及到多表数据库时,类向导将产生大量的关于记录集的源码文件使得工程给人的感觉很臃肿混乱. 本文介绍如何使用一个模板记录集类来降低类向导所产生的记录集文件的数量,同时增强记录集类(CRecordset)的功能.这个模板记录集类叫做:CDataSet.它的主要目的是降低代码量,为数据对象数组提