क्या यह बताने का कोई तरीका है कि कोई थ्रेड सामान्य रूप से बाहर निकला है या अपवाद के कारण?पायथन थ्रेड निकास कोड
9
A
उत्तर
13
जैसा कि बताया गया है, थ्रेड क्लास के चारों ओर एक रैपर उस राज्य को पकड़ सकता है। यहां एक उदाहरण दिया गया है।
>>> from threading import Thread
>>> class MyThread(Thread):
def run(self):
try:
Thread.run(self)
except Exception as self.err:
pass # or raise
else:
self.err = None
>>> mt = MyThread(target=divmod, args=(3, 2))
>>> mt.start()
>>> mt.join()
>>> mt.err
>>> mt = MyThread(target=divmod, args=(3, 0))
>>> mt.start()
>>> mt.join()
>>> mt.err
ZeroDivisionError('integer division or modulo by zero',)
-1
यदि आप कोई अपवाद था तो सफलता के लिए कुछ ग्लोबल वैरिएबल 0 पर सेट कर सकते हैं, या गैर-शून्य सेट कर सकते हैं। यह एक सुंदर मानक सम्मेलन है।
हालांकि, आपको इस चर को म्यूटेक्स या सेमफोर से बचाने की आवश्यकता होगी। या आप यह सुनिश्चित कर सकते हैं कि केवल एक धागा इसे कभी भी लिखेगा और अन्य सभी इसे पढ़ लेंगे।
0
अपने थ्रेड फ़ंक्शन कैच अपवाद हैं। (आप इसे एक साधारण रैपर फ़ंक्शन के साथ कर सकते हैं जो केवल पुराने थ्रेड फ़ंक्शन को ... except
या try
... except
... else
ब्लॉक) के अंदर कर सकता है। फिर सवाल यह है कि "एक धागे से दूसरे में जानकारी कैसे पास करें", और मुझे लगता है कि आप पहले ही जानते हैं कि यह कैसे करें।
0 सफलता के लिए एक सुंदर मानक सम्मेलन हो सकता है, लेकिन क्या मांसपेशियों पर बुलियन 'उत्तराधिकारी' थोड़ा आसान नहीं होगा? –
यदि मैं थ्रेड को उप-वर्ग करता हूं तो इसे वैश्विक नहीं होना चाहिए, सफलता को इंगित करने के लिए केवल एक सदस्य चर की आवश्यकता है। मैं बस सोच रहा था कि ऐसा करने के लिए कोई अंतर्निहित तरीका है, जैसे प्रक्रिया निकास कोड। –
धागे और वैश्विक स्थिति। दो महान स्वाद tthat tate gsrat eogetherrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr – Glyph