How does connection pooling work in PyMongo?
हर कनेक्शन उदाहरण में निर्मित कनेक्शन पूलिंग गया है। डिफ़ॉल्ट रूप से, प्रत्येक थ्रेड को अपना पहला सॉकेट अपने पहले ऑपरेशन पर आरक्षित करता है। उन सॉकेट तब तक आयोजित किए जाते हैं जब तक कि end_request() को उस थ्रेड द्वारा नहीं कहा जाता है।
कॉलिंग end_request() सॉकेट को पूल में वापस करने की अनुमति देता है, और नई सॉकेट बनाने के बजाय अन्य धागे द्वारा उपयोग किया जा सकता है। कई धागे के साथ या लंबे समय तक चलने वाले धागे वाले अनुप्रयोगों के लिए इस विधि का न्यायसंगत उपयोग महत्वपूर्ण है जो PyMongo संचालन के लिए कुछ कॉल करता है।
वैकल्पिक रूप से, auto_start_request = गलत के साथ बनाया गया कनेक्शन सभी धागे के बीच सॉकेट (सुरक्षित रूप से) साझा करेगा।
मुझे लगता है कि यह आपके पास मौजूद एप्लिकेशन के प्रकार और कनेक्शन पर कितने समय तक पहुंच जाएगा। end_request
पर कॉल करने का विचार लंबे समय तक सॉकेट पर लंबे समय तक चलने वाले अनुरोधों के साथ मदद करता है और कई सॉकेट बनने का कारण बनता है। यदि कोई अनुरोध कनेक्शन को तब रिलीज़ कर सकता है जब इसे अब इसकी आवश्यकता नहीं है, तो सॉकेट को अन्य अनुरोधों के लिए पुनर्स्थापित किया जा सकता है।
यदि वे तेज़ अनुरोध हैं, तो मुझे लगता है कि auto_start_request=False
सॉकेट का पुन: उपयोग करके काम करता है।
एक कनेक्शन को सुनिश्चित करना एक ही सॉकेट का उपयोग करता रहता है जिसका अर्थ लगातार पढ़ता है। सोचें कि क्या आपने कोई प्रश्न किया है लेकिन इसमें देरी हो गई है, और फिर immeditely एक और सवाल किया और यह एक अलग सॉकेट का इस्तेमाल किया। यह सॉकेट पिछले से पहले जवाब देने का प्रबंधन करता है। आपके पास असंगत डेटा होगा क्योंकि यह पिछले लेखन को प्रतिबिंबित नहीं करता है।
हाय @jdi, उत्तर के लिए धन्यवाद, क्या आप अपनी टिप 'max_pool_size' पैरामीटर के साथ साझा कर सकते हैं? – est
आपके लिए एक कनेक्शन की संख्या को प्रबंधित करने का एक तरीका है जो एक कनेक्शन की अनुमति देगा। यदि आपका ऐप सिंगल थ्रेडेड है तो यह पूल में केवल 1 का उपभोग करेगा। यदि यह एक भारी थ्रेडेड ऐप है, तो प्रति थ्रेड एक होगा और आप यह सोचने की क्षमता चाहते हैं कि यह एक सर्वर पर कितनी अनुमति देगा – jdi
PyMongo 3 में, "auto_start_request" विकल्प चला गया है। – Mithril