MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Грешка в торнадо:[Errno 24] Грешка с твърде много отворени файлове

Много просто, обектът RequestHandler се инстанцира за всяка заявка. Което означава, че кешираният обект, който запазвате, е на обекта RequestHandler (например разширяване).

Ако трябваше да добавите прост "print 'CREATED!'" към функцията dbmongo(...), ще видите, че тя се създава при всяка GET заявка.

Това, което трябва да направите, е да прикачите манипулатора към обекта на класа или „глобален“, ако е необходимо, въпреки че най-добрият случай е да го поставите върху обекта на приложението Tornado.

Просто:

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 = None
def dbmongo():
    if not dbmongo_connection:
        dbmongo_connection = apymongo.Connection("127.0.0.1", 27017)
    return dbmongo_connection

И двете имат един и същ проблем, който е, че ако имате много класове, които искат да използват DB връзката, е по-трудно да я споделите. Тъй като DB е споделен обект, вероятно искате такъв за цялото си приложение.

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. Заявка за документи, при които размерът на масива е по-голям от 1

  2. Как да наблюдавате MongoDB с Prometheus &ClusterControl

  3. Най-добрият начин за моделиране на система за гласуване в MongoDB

  4. Инсталиране на MongoDB на CentOS 7

  5. Уникалният индекс в mongoose не работи