sql >> Databáze >  >> NoSQL >> MongoDB

Chyba tornáda:[Errno 24] Chyba příliš mnoha otevřených souborů

Velmi jednoduché, objekt RequestHandler je vytvořen pro každý požadavek. Což znamená, že objekt uložený v mezipaměti, který ukládáte, je na objektu RequestHandler (např. expand).

Pokud byste k funkci dbmongo(...) přidali jednoduchý „tisk 'CREATED!'“, viděli byste, že se vytváří při každém požadavku GET.

Co musíte udělat, je připojit handler k objektu třídy nebo "globální" podle potřeby, i když nejlepším případem je umístit jej na objekt Tornado Application.

Jednoduché:

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

Druhým přístupem je pouze to, aby bylo globální ve vašem souboru:

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

Oba mají stejný problém, který spočívá v tom, že pokud máte mnoho tříd, které chtějí používat připojení DB, je těžší je sdílet. Protože DB je sdílená entita, pravděpodobně ji budete chtít pro celou aplikaci.

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. Hromadné vytváření klíčů v Redis - ServiceStack C#

  2. Uložení návratové hodnoty node.js setTimeout v redis

  3. Jak zobrazit obrázek base64 v reakci?

  4. Jak přimět klienta ke stažení velmi velkého souboru, který je generován za běhu