【问题标题】:Saving MotorEngine instance with Tornado使用 Tornado 保存 MotorEngine 实例
【发布时间】:2015-12-03 08:51:16
【问题描述】:

我在使用 Tornado 处理程序保存 MotorEngine 实例时遇到问题。以下是我为简洁起见缩短的代码摘录。

如果我用mongoengine 替换motorengine 导入,则实例会正确保存。

# model
from motorengine.document import Document
from motorengine.fields import *

class Test(Document):
    nameTest = StringField(required=True)
    numberTest = DecimalField(required=True)
    boolTest = BooleanField(required=True)

# handler
class TestHandler(BaseHandler):

    @tornado.gen.coroutine
    def post(self, *args, **kwargs):
        response = self._service.save_test()
        print(response)
        self.write('')
        self.finish()

# save method
from models import Test

def save_test(self):
        yield Test.objects.create(nameTest="foobar", boolTest=False, numberTest=123)

我的代码中是否有任何明显的错误?异步编程不是我的强项。

:编辑:

根据 Ben 的回答,这是有效的代码

# handler
@tornado.gen.coroutine
def post(self, *args, **kwargs):
    yield self._service.save_test()

# save method
@tornado.gen.coroutine
def save_test(self):
    yield Test.objects.create(nameTest="foobar", boolTest=False, numberTest=123)

【问题讨论】:

    标签: python asynchronous tornado motorengine


    【解决方案1】:

    save_test(以及以这种方式使用yield的任何函数)必须具有@gen.coroutine装饰器,并且当您在post()中调用它(或任何其他协程)时,您必须使用yield save_test()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 2010-09-14
      • 1970-01-01
      相关资源
      最近更新 更多