Muito simples, o objeto RequestHandler é instanciado para cada solicitação. O que significa que o objeto em cache que você está salvando está no objeto RequestHandler (por exemplo, expandir).
Se você adicionar um simples "print 'CREATED!'" à função dbmongo(...), você verá que ele é criado em cada solicitação GET.
O que você precisa fazer é anexar o manipulador ao objeto de classe, ou um "global" conforme necessário, embora o melhor caso seja colocá-lo no objeto Aplicativo Tornado.
Simples:
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
A segunda abordagem é apenas torná-lo global em seu arquivo:
dbmongo_connection = None
def dbmongo():
if not dbmongo_connection:
dbmongo_connection = apymongo.Connection("127.0.0.1", 27017)
return dbmongo_connection
Ambos têm o mesmo problema, que é que, se você tiver muitas classes que desejam usar a conexão do banco de dados, é mais difícil compartilhá-la. Como o banco de dados é uma entidade compartilhada, você provavelmente deseja um para todo o seu aplicativo.
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.mongodb
class expand(tornado.web.RequestHandler, MongoMixin):
def get(self):
db = self.mongodb()