MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Lỗi Tornado:[Errno 24] Lỗi quá nhiều tệp đang mở

Rất đơn giản, đối tượng RequestHandler được khởi tạo cho mọi yêu cầu. Có nghĩa là đối tượng được lưu trong bộ nhớ cache mà bạn đang lưu nằm trên đối tượng RequestHandler (ví dụ:mở rộng).

Nếu bạn thêm một "print 'CREATED!'" Đơn giản vào hàm dbmongo (...), bạn sẽ thấy rằng nó được tạo theo mọi yêu cầu GET.

Những gì bạn cần làm là đính kèm trình xử lý vào đối tượng lớp hoặc "toàn cục" nếu cần, mặc dù trường hợp tốt nhất là đặt nó vào đối tượng Ứng dụng Tornado.

Đơn giản:

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

Cách tiếp cận thứ hai chỉ là làm cho nó trở thành toàn cầu trong tệp của bạn:

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

Cả hai đều có chung một vấn đề là nếu bạn có nhiều lớp muốn sử dụng kết nối DB, thì việc chia sẻ nó sẽ khó hơn. Vì DB là một thực thể được chia sẻ nên bạn có thể muốn một thực thể cho toàn bộ ứng dụng của mình.

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. MongoDB $ toLower

  2. Tôi nên sử dụng cơ sở dữ liệu NoSQL nào để ghi nhật ký?

  3. Có tùy chọn nào để giới hạn việc sử dụng bộ nhớ mongodb không?

  4. Hỗ trợ cho nhiều kiểu người dùng bằng Passport-local mongoose node.js

  5. Mongodb Aggregation Framework:$ group có sử dụng chỉ mục không?