में धागे के बीच अपवाद कैसे पास करूं, मुझे थ्रेड सीमा में अपवाद पारित करने की आवश्यकता है।मैं पाइथन
मैं एक गैर थ्रेड सुरक्षित ऐप में एम्बेडेड पायथन का उपयोग कर रहा हूं जिसमें एक थ्रेड सुरक्षित कॉल, post_event (कॉल करने योग्य) है, जो इसके मुख्य धागे से कॉल करने योग्य कहता है।
मैं एक अलग थ्रेड में एक पिगेटक गुई चला रहा हूं, इसलिए जब कोई बटन क्लिक किया जाता है तो मैं post_event के साथ एक ईवेंट पोस्ट करता हूं, और जारी रखने से पहले इसे समाप्त करने का इंतजार करता हूं। लेकिन मुझे यह जानने के लिए कॉलर की आवश्यकता है कि कैली ने अपवाद फेंक दिया है, और यदि ऐसा है तो इसे उठाएं। मैं ट्रेसबैक के बारे में बहुत चिंतित नहीं हूं, सिर्फ अपवाद ही।
मेरे कोड मोटे तौर पर है:
class Callback():
def __init__(self,func,*args):
self.func=func
self.args=args
self.event=threading.Event()
self.result=None
self.exception=None
def __call__(self):
gtk.gdk.threads_enter()
try:
self.result=self.func(*self.args)
except:
#what do I do here? How do I store the exception?
pass
finally:
gtk.gdk.threads_leave()
self.event.set()
def post(self):
post_event(self)
gtk.gdk.threads_leave()
self.event.wait()
gtk.gdk.threads_enter()
if self.exception:
raise self.exception
return self.result
सराहना की किसी भी मदद की है, धन्यवाद।
वास्तव में मैं क्या कर रहा था, धन्यवाद। आम तौर पर मैं कतारों का उपयोग करता हूं, आदि, लेकिन मैं 'पहिया का पुन: आविष्कार कर रहा हूं' क्योंकि मेरी स्क्रिप्ट में किसी एक समय में केवल एक चीज चलनी चाहिए, और मुझे वह सामान चाहिए जो ऐप के धागे को खत्म करने और देने के लिए चलता है मैं gtk धागे में कोई और कार्रवाई करने से पहले एक परिणाम। मैं मूल रूप से दो थ्रेड के साथ नकली एकल थ्रेडिंग की कोशिश कर रहा हूं। यह कष्टप्रद है लेकिन ऐसा लगता है कि यह ठीक काम कर रहा है। – DaedalusFall