2011-01-25 15 views
6

मैं एक बहु थ्रेडेड पायथन ऐप लिख रहा हूं जो सर्वरों के लिए कई टीसीपी कनेक्शन बनाता है। प्रत्येक कनेक्शन एक अलग थ्रेड पर किया जाता है। कभी-कभी धागा लंबे समय तक लटकता है जो मैं नहीं चाहता। कुछ समय के बाद मैं खुद को मारने के लिए थ्रेड कैसे प्राप्त कर सकता हूं? मुख्य धागे से मैं कैसे निर्धारित कर सकता हूं कि बाल धागा खुद को मार डाला?पायथन: टाइमआउट के बाद मुझे खुद को मारने के लिए धागा कैसे प्राप्त किया जा सकता है?

यदि संभव हो तो मैं कोड के स्निपेट की सराहना करता हूं कि यह कैसे करना है। धन्यवाद।

अद्यतन प्रणाली उबंटू 9:10 है

+0

हैंग्स का क्या मतलब है? यदि यह नेटवर्क ऑपरेशन है जो लटकता है, तो क्या आप इसके लिए टाइमआउट सेट नहीं कर सकते? –

+0

हां मैं नेटवर्क टाइमआउट सेट कर सकता हूं, लेकिन इससे कुछ अन्य समस्याएं आती हैं। कल से मेरा प्रश्न देखें। बिना किसी टाइमआउट के इस विधि में अधिकांश मेजबानों के लिए अच्छा काम करता है। मैं सिर्फ यह जानना चाहता हूं कि खुद को मारने के लिए धागा कैसे प्राप्त करें। – VacuumTube

+0

थ्रेडिंग के बारे में पढ़ें। टाइमर "एक थ्रेड जो एक निर्दिष्ट अंतराल के बाद फ़ंक्शन निष्पादित करता है।" http://docs.python.org/library/threading.html#timer-objects। जैसे क्या आप टाइमर बना सकते हैं, थ्रेड को बंद करने वाले फ़ंक्शन को कॉल कर सकते हैं? –

उत्तर

4

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

यदि थ्रेड जीवित है, तो आप मुख्य थ्रेड से जांच सकते हैं।() विधि।

+0

यह वास्तव में ऐसा करने वाला एकमात्र * समझदार * तरीका है। – Arafangion