2017-05-06 51 views
0

使用龙卷风和电机, 我感到有些困惑方面,我怎么也得处理访问数据层,如果我想有一个非bloking访问我开始有点项目如何在单独的数据访问层正确使用汽车

usally我分开我的项目,这种结构

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() 

“用户”这是我的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 

回答

1

一般情况下,只要您使用yield,你正在做一些异步/无阻塞。因此,在这种情况下,您发布的代码看起来是正确的,除了缺少@gen.coroutine修饰器的UsersDao.get(每当您使用yield来处理异步内容时,您需要这个修饰器,并且您随时需要使用yield)。