0

我开始了一个使用龙卷风和电机的小项目,如果我想获得非阻塞访问,我对如何处理访问数据层感到有些困惑

通常我用这种结构分隔我的项目

root_project
-logic
-data
--UsersDao
-handlers
--Users
-main.py

但我不知道我是否做这样的事情连接将是非阻塞的

    @gen.coroutine
    @tornado.web.asynchronous
    def get(self, id):
       users = self.settings["User"]
       result = yield from users.get(id)
       self.write(json_encode(result))
       self.finish()

'users' 这是我的 UsersDao 对象,看起来像

class UsersDao(object):
    ....
def get(self, user, callback=None):
    try:
        user = yield self._db["users"].find_one({'_id': user})
        ...create user object
        return user
    except ValueError:
        pass
    except OperationFailure:
        pass
    except Exception:
        raise
4

1 回答 1

1

通常,无论何时使用yield,您都在做一些异步/非阻塞的事情。因此,在这种情况下,您发布的代码看起来是正确的,除了缺少的@gen.coroutine装饰器UsersDao.get(每当您yield用于异步内容时,您都需要这个装饰器,并且您需要在yield调用它的任何时候使用它)。

于 2017-05-09T01:40:06.450 回答