2012-06-10 15 views
15

मुझे पता है pymongo थ्रेड सुरक्षित है और इसमें एक इनबिल्ट कनेक्शन पूल है।पिमोंगो कनेक्शन पूलिंग और क्लाइंट अनुरोध

एक वेब ऐप में जिस पर मैं काम कर रहा हूं, मैं हर अनुरोध पर एक नया कनेक्शन उदाहरण बना रहा हूं।

मेरी समझ यह है कि pymongo कनेक्शन पूल का प्रबंधन करता है, इसलिए प्रत्येक अनुरोध पर नया कनेक्शन बनाने का गलत तरीका नहीं है, अनुरोध के अंत में कनेक्शन उदाहरण पुनः दावा किया जाएगा और बाद के अनुरोधों पर उपलब्ध होगा ।

क्या मैं यहां सही हूं, या क्या मुझे एकाधिक अनुरोधों में उपयोग करने के लिए केवल एक उदाहरण बनाना चाहिए?

उत्तर

8

"गलत दृष्टिकोण" आपके आवेदन की वास्तुकला पर निर्भर करता है। पिमोंगो थ्रेड-सुरक्षित और स्वचालित कनेक्शन पूलिंग के साथ, एक साझा साझा कनेक्शन का वास्तविक उपयोग, या एकाधिक कनेक्शन, "काम" करने जा रहा है। लेकिन परिणाम इस बात पर निर्भर करेंगे कि आप व्यवहार की अपेक्षा करते हैं। दोनों मामलों पर दस्तावेज़ीकरण टिप्पणियां।

यदि आपका एप्लिकेशन थ्रेड से थ्रेड किया गया है, तो प्रत्येक थ्रेड को कनेक्शन तक पहुंचने के लिए अपनी सॉकेट प्राप्त होगी। तो चाहे आप एक साझा साझा कनेक्शन बनाते हैं, या किसी नए अनुरोध का अनुरोध करते हैं, यह आपके अनुरोधों को थ्रेड किया गया है या नहीं।

गीवेंट का उपयोग करते समय, आपके पास प्रति हरे रंग की सॉकेट हो सकती है। इसका मतलब है कि आपके पास प्रति अनुरोध सही धागा नहीं है। अनुरोध एसिंक हो सकते हैं, और अभी भी अपनी सॉकेट प्राप्त कर सकते हैं।

संक्षेप में:

  • अपने webapp अनुरोध पिरोया जाता है, तो यह आपको एक नया कनेक्शन का उपयोग जो जिस तरह से कोई फर्क नहीं पड़ता। नतीजा वही होगा (प्रति थ्रेड सॉकेट)
  • यदि आपका वेबपैप gevent के माध्यम से async है, तो इससे कोई फर्क नहीं पड़ता कि आप किस तरह से एक नया पता लगाने तक पहुंचते हैं। नतीजा वही होगा। (प्रति ग्रीनलेट सॉकेट)
  • यदि आपका वेबपैप एसिंक है, लेकिन gevent के माध्यम से नहीं, तो आपको best suggested workflow पर नोट्स को ध्यान में रखना होगा।
संबंधित मुद्दे