스레드 경계를 넘어 예외를 전달해야합니다.파이썬에서 스레드간에 예외를 전달하는 방법
파이썬은 스레드 안전 호출, post_event (callable)이 있는데, 호출 스레드는 주 스레드에서 호출됩니다.
별도의 스레드에서 pygtk gui를 실행 중이므로 버튼을 클릭하면 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