从MotorEngine异步查询获取结果

2024-04-23 23:22:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在我的Tornado应用程序中切换MongoEngine和MotorEngine,以实现异步数据库访问,但到目前为止我还是一无所获。在

query

@gen.coroutine
    def get_all_users(self):
        users = yield User.objects.find_all()

handler

^{pr2}$

当我打印ret变量时,它显示<tornado.concurrent.Future object at 0x7fb0236fe450>。如果我想打印ret.result(),那我就一事无成了。在

任何帮助都是值得感谢的,因为我正在与我所想的一切作斗争。。。在


Tags: self数据库应用程序getdefallqueryusers
2条回答

只是个建议。如果希望避免每次使用userMethods方法时都创建其实例:

userMethods = UserMethods()

在声明@classmethod修饰符之前,可以使用它:

^{pr2}$

所有用户都需要以某种方式返回它的值。在Python2.6或2.7中,生成器不允许使用“return”语句,因此协程有一个特殊的“return”异常:

@gen.coroutine
def get_all_users(self):
    users = yield User.objects.find_all()
    raise gen.Return(users)

在Python3.3及更高版本中,您可以简单地“返回用户”。在

现在在“get”中,调用“get-unu-all-yu-users”只会给你一个悬而未决的未来,而不是一个价值。您必须等待未来通过产生该值来解析它:

^{pr2}$

有关从协同例程调用协同例程的更多信息,请参阅my"Refactoring Tornado Coroutines"。在

顺便说一下,你可以用通用协同程序,它比“异步”更现代发电机发动机“,但这两种风格都有效。在

相关问题 更多 >