Сохранение экземпляра MotorEngine с помощью Tornado
У меня проблемы с сохранением экземпляра MotorEngine с помощью обработчика торнадо. Ниже приведены выдержки из кода, которые я сократил для краткости.
если я заменю motorengine
импорт с mongoengine
экземпляр сохраняется должным образом.
# 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)
Есть ли явные ошибки в моем коде? Асинхронное программирование не моя сильная сторона.
:РЕДАКТИРОВАТЬ:
Согласно ответу Бена, это код, который работает
# 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)
1 ответ
Решение
save_test
(и любая функция, которая использует yield
таким образом) должен иметь @gen.coroutine
декоратор, и когда вы вызываете его (или любую другую сопрограмму) в post()
ты должен использовать yield save_test()