2010-07-02 18 views
5

मैंने पाइथन के लिए थ्रेडिंग पर प्रलेखन के माध्यम से पढ़ा है और जैसा कि मैंने इसे देखा है, निम्नलिखित को सही रखना चाहिए: आप किसी भी पीओडी या पायथन विशिष्ट वस्तु को (पढ़ सकते हैं) (जैसे सरणी) एक ही समय में एक ही चीज़ की कोशिश कर रहे एक बहु थ्रेडेड प्रोग्राम में विफलता के बिना, लेकिन आप उन्हें बदल नहीं सकते हैं और थ्रेड अखंडता स्वीकार नहीं कर सकते हैं।पायथन में प्रश्न सुरक्षा (प्रश्न यह कैसे काम करता है)

मेरा प्रश्न कक्षाओं के बारे में है। मेरे पास एक सर्वर है जो अलग-अलग धागे तक डेटाबेस पहुंच प्रदान कर रहा है, हालांकि मैं चाहता हूं कि वे उन सभी वर्गों के उदाहरण तक पहुंच सकें जो प्रतिक्रिया पीढ़ी को संभालते हैं। हालांकि, मैं सोच रहा हूं कि यह वर्ग थ्रेड-सुरक्षित है (मैं कई उदाहरण बनाने से बचना चाहता हूं), थ्रेड किसी भी इंस्टेंस चर को परिवर्तित नहीं करता है (यानी self.something = (something)) प्रत्येक फ़ंक्शन अपने स्थानीय चर का उपयोग करता है (वे क्लास इंस्टेंस चर का उपयोग करते हैं लेकिन उन्हें नहीं बदलता है), इसलिए इसे समेटने के लिए: मेरा प्रश्न यह है कि यदि कई धागे एक ही उदाहरण का उपयोग कर सकते हैं और एक ही समय में कॉल फ़ंक्शन का उपयोग कर सकते हैं।

उत्तर

1

स्थानीय थ्रेड-सुरक्षित हैं क्योंकि वे धागे के बीच साझा नहीं हैं। सभी स्थिरांक (चर जो आप किसी भी थ्रेड से कभी नहीं लिखते हैं) थ्रेड-सुरक्षित हैं। यदि आपके पास यह सब है, तो हाँ, यह ठीक है। सुनिश्चित करें कि जिन वर्ग के सदस्यों के बारे में आप बात कर रहे हैं वे वास्तव में किसी भी अन्य धागे से नहीं लिखे गए हैं।

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

+0

ओके। धन्यवाद, मैं आपकी सलाह लेगा और डेटाबेस थ्रेड को प्रत्येक धागे में व्यक्तिगत बना दूंगा। – Andreas

संबंधित मुद्दे