MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Błąd Tornado:[Errno 24] Błąd zbyt wielu otwartych plików

Bardzo proste, obiekt RequestHandler jest tworzony dla każdego żądania. Oznacza to, że zapisywany obiekt w pamięci podręcznej znajduje się w obiekcie RequestHandler (np. expand).

Gdybyś miał dodać proste "print 'CREATED!'" do funkcji dbmongo(...) zobaczyłbyś, że jest on tworzony przy każdym żądaniu GET.

To, co musisz zrobić, to dołączyć procedurę obsługi do obiektu klasy lub, w razie potrzeby, „globalną”, chociaż najlepiej jest umieścić ją w obiekcie aplikacji Tornado.

Proste:

Konfiguracja klasy
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

Drugie podejście to po prostu uczynienie go globalnym w twoim pliku:

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

Oba mają ten sam problem, który polega na tym, że jeśli masz wiele klas, które chcą korzystać z połączenia DB, trudniej jest je udostępnić. Ponieważ baza danych jest jednostką współdzieloną, prawdopodobnie potrzebujesz jej dla całej aplikacji.

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Sprawdź istnienie kolekcji w MongoDB

  2. MongoDB $isoDayOfWeek

  3. mongodb nie mógł połączyć się z serwerem

  4. Grupuj według przedziałów dat

  5. Jak wpisać wiele wierszy do listy rozdzielanej przecinkami w SQL?