很简单,为每个请求实例化RequestHandler对象。这意味着您要保存的缓存对象位于RequestHandler(例如,expand)对象上。
如果要向dbmongo(…)函数添加一个简单的“ print’CREATED!’”,您会看到它是在每个GET请求中创建的。
您需要做的是将处理程序附加到类对象,或者根据需要附加“全局”,尽管最好的情况是将其放在Tornado Application对象上。
简单:
class setup(tornado.web.RequestHandler): @classmethod def dbmongo(cls): if not hasattr(cls, '_dbmongo'): cls._dbmongo = apymongo.Connection("127.0.0.1", 27017) return cls._dbmongo第二种方法是使其在文件中成为全局文件:
dbmongo_connection = Nonedef dbmongo(): if not dbmongo_connection: dbmongo_connection = apymongo.Connection("127.0.0.1", 27017) return dbmongo_connection两者都有相同的问题,即如果您有很多想要使用数据库连接的类,则很难共享它。由于数据库是一个共享实体,因此您可能希望为整个应用程序使用一个实体。
class MongoMixin(object): def mongodb(self): if not hasattr(self.application, 'mongodb'): self.application.mongodb = apymongo.Connection(self.application.settings.get("mongohost", "127.0.0.1"), 27017) return self.application.mongodbclass expand(tornado.web.RequestHandler, MongoMixin): def get(self): db = self.mongodb()

![龙卷风“错误:[Errno 24]打开的文件太多”错误 龙卷风“错误:[Errno 24]打开的文件太多”错误](http://www.mshxw.com/aiimages/31/376401.png)
