sql >> Database teknologi >  >> NoSQL >> MongoDB

Tornado-fejl:[Errno 24] Fejl ved for mange åbne filer

Meget enkelt, RequestHandler-objektet instansieres for hver anmodning. Hvilket betyder, at det cachelagrede objekt, du gemmer, er på RequestHandler-objektet (f.eks. expand).

Hvis du skulle tilføje et simpelt "print 'CREATED!'" til dbmongo(...)-funktionen, ville du se, at det oprettes på hver GET-anmodning.

Det, du skal gøre, er at knytte handleren til klasseobjektet eller en "global" efter behov, selvom det bedste er at sætte det på Tornado Application-objektet.

Simpelt:

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

Anden tilgang er bare at gøre den til en global i din fil:

dbmongo_connection = None
def dbmongo():
    if not dbmongo_connection:
        dbmongo_connection = apymongo.Connection("127.0.0.1", 27017)
    return dbmongo_connection

Begge disse har det samme problem, som er, at hvis du har mange klasser, der vil bruge DB-forbindelsen, er det sværere at dele den. Da DB er en delt enhed, vil du sandsynligvis have en til hele din applikation.

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



  1. Mongoexport ved hjælp af $gt- og $lt-begrænsninger på et datointerval

  2. Pålidelige biblioteker derude til Spring boot redis integrationstest

  3. Returnerer indre array-elementer fra flere dokumenter i sorteret form

  4. Hvordan indsætter man et element i MongoDB intern liste?