2008-12-28 13 views
6

पाइथन में धागे का उपयोग करने के तरीके पर सामान्य ट्यूटोरियल या अच्छा संसाधन?पायथन में थ्रेड

धागे का उपयोग कब, कैसे वे प्रभावी रहे हैं, और धागे कुछ सामान्य पृष्ठभूमि के [विशिष्ट अजगर करने के लिए]?

उत्तर

13

धागे इस्तेमाल किया जाना चाहिए जब आप दो बातें एक ही बार में चलाने के लिए, या चाहते हैं नीचे मुख्य प्रक्रिया को धीमा के बिना पृष्ठभूमि में चलाने के लिए कुछ करना चाहते हैं।
मेरी सिफारिश केवल धागे का उपयोग करना है यदि आपको करना है। वे आम तौर पर एक कार्यक्रम में जटिलता जोड़ते हैं।
सूत्रण के लिए मुख्य दस्तावेज़ यहां है: http://docs.python.org/library/threading.html
कुछ उदाहरण यहां हैं:
http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/1/
http://linuxgazette.net/107/pai.html
http://www.wellho.net/solutions/python-python-threads-a-first-example.html

1

कई ट्यूटोरियल here रहे हैं।

3

एक शानदार पीडीएफ, Tutorial on Threads Programming with Python कैलिफोर्निया विश्वविद्यालय, डेविस के नॉर्मन मैटलॉफ और फ्रांसिस एचएसयू द्वारा है।

धागे जब भी संभव से बचा जाना चाहिए। वे जटिलता, सिंक्रनाइज़ेशन मुद्दों और मुद्दों को डीबग करने में कठोर परिश्रम में बहुत अधिक जोड़ते हैं। हालांकि कुछ समस्याओं के लिए उन्हें (यानी जीयूआई प्रोग्रामिंग) की आवश्यकता होती है, लेकिन यदि आप कर सकते हैं तो मैं आपको एकल-थ्रेडेड समाधान की तलाश करने के लिए प्रोत्साहित करता हूं।

+3

क्षमा करें, धागे को "जहां भी संभव हो से बचा नहीं जाना चाहिए", न ही वे जीयूआई प्रोग्रामिंग के लिए "आवश्यक" हैं। –

+0

अच्छा, शायद यह सही है, लेकिन क्या आप बेहतर कारण/उदाहरण प्रदान कर सकते हैं? –

+0

लिंक के लिए धन्यवाद! –

8

एक बहु थ्रेडेड पायथन एप्लिकेशन लिखने में समय और प्रयास करने से पहले याद रखने की एक बात यह है कि Global Interpreter Lock (जीआईएल) है, इसलिए आप वास्तव में एक समय में एक से अधिक धागे नहीं चलेंगे।

यह कई कोर या सीपीयू का लाभ लेने की कोशिश कर के लिए अनुपयुक्त सूत्रण बनाता है। आपको अन्य संसाधनों (नेटवर्क, डिस्क, ...) मल्टीप्लेक्सिंग से कुछ गति मिल सकती है, लेकिन यह मेरे अनुभव में विशेष रूप से ध्यान देने योग्य नहीं है।

सामान्य तौर पर, मैं केवल धागे का उपयोग करते हैं वहाँ कई तार्किक अलग कार्य एक ही बार में हो रहा है, और अभी तक मैं उन सभी को एक ही वी एम में चाहते हैं। एक धागा वेब से डेटा खींच रहा है और इसे एक कतार में डाल रहा है, जबकि एक और धागा क्यूई से निकलता है और डेटाबेस को लिखता है, ऐसा कुछ।

पायथन 2.6 के साथ, नया multiprocessing मॉड्यूल है जो बहुत अच्छा है - यह threading मॉड्यूल के लिए एक बहुत ही समान इंटरफ़ेस मिला है, लेकिन वास्तव में जीआईएल को अलग करने के लिए नई ओएस प्रक्रियाओं को जन्म देता है।

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