बहुत सरल, RequestHandler ऑब्जेक्ट प्रत्येक अनुरोध के लिए तत्काल है। जिसका अर्थ है कि कैश्ड ऑब्जेक्ट जिसे आप सहेज रहे हैं वह RequestHandler (उदा. विस्तृत करें) ऑब्जेक्ट पर है।
यदि आप dbmongo(...) फ़ंक्शन में एक साधारण "प्रिंट 'क्रिएटेड!'" जोड़ना चाहते हैं, तो आप देखेंगे कि यह प्रत्येक GET अनुरोध पर बनाया गया है।
आपको जो करना है वह हैंडलर को क्लास ऑब्जेक्ट, या आवश्यकतानुसार "वैश्विक" से जोड़ना है, हालांकि सबसे अच्छा मामला इसे टॉर्नेडो एप्लिकेशन ऑब्जेक्ट पर रखना है।
सरल:
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
इन दोनों में एक ही समस्या है जो यह है कि यदि आपके पास बहुत सी कक्षाएं हैं जो डीबी कनेक्शन का उपयोग करना चाहते हैं, तो इसे साझा करना कठिन है। चूंकि डीबी एक साझा इकाई है, आप शायद अपने पूरे आवेदन के लिए एक चाहते हैं।
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()