2010-09-30 15 views
5

मैं अजगर में धागे को मारने की कोशिश कर रहा हूं। कोशिश करने के माध्यम से धागे की रन विधि के एक सुंदर निकास के रूप में इसे करने का पसंदीदा तरीका एक अपवाद होगा: सिवाय इसके कि: जोड़ी संसाधनों को बंद करने की अनुमति देगी।पायथन हत्या धागा

मैंने कोशिश की: Is there any way to kill a Thread in Python?, लेकिन यह निर्दिष्ट करता है कि कोड सिस्टम सिस्टम (जैसे time.sleep) निष्पादित करते समय काम नहीं करता है। क्या किसी अन्य थ्रेड में अपवाद बढ़ाने का कोई तरीका है (या प्रक्रिया, दिमाग में नहीं,) जो धागा निष्पादित करने वाला कोई काम नहीं करता है?

+0

संभावित डुप्लिकेट [क्या पाइथन में थ्रेड को मारने का कोई तरीका है?] (Http://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in- अजगर) – Mark

उत्तर

4

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

उसने कहा, यह किया जा सकता है - लेकिन, वर्तमान में, पाइथन में सुरक्षित रूप से नहीं। पाइथन में अतुल्यकालिक रूप से अपवाद बढ़ाना खतरनाक है, क्योंकि आप इसे अपवाद हैंडलर के दौरान बढ़ा सकते हैं, जो एक और अपवाद उठाएगा और क्लीनअप को ठीक से होने से रोक देगा। मेरा उत्तर How to limit execution time of a function call in Python पर देखें।

कुछ प्रकार के नींद को रद्द करने के लिए सिग्नल करना संभव है, लेकिन पाइथन में इसके लिए कोई सामान्य आधारभूत संरचना नहीं है। आप थ्रेड को मारने की जरूरत से बचने या थ्रेड को प्रक्रिया पर ले जाने से बहुत बेहतर हैं, जहां आप पूरी प्रक्रिया को सिग्नल भेज सकते हैं और साफ़ से बाहर निकल सकते हैं।

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