私はGUI用にwxPythonを使用しています。 AppLogic
クラスでは、この非常にクラスのメソッドで実行されるワーカースレッドがあります。ここでこのデッドロックを理解していますか?
class GUI:
_wx_app = None
_main_window = None
_app_logic = None
def start(self):
# bla bla bla
self._main_window.Show()
self._app_logic.begin()
self._wx_app.MainLoop()
def _cancel_listener(self):
"""Called from MainWindow, if the user has clicked the cancel
button."""
print("I'm leaving this scope.")
self._app_logic.cancel() # Should cancel the task done in
# a second thread.
def _status_listener(self, status_text):
"""Called often by the worker thread."""
print("Here I am again.")
if self._main_window.status.GetLabel() != status_text:
self._main_window.status.SetLabel(status_text)
上から_cancel_listener
によって呼び出されAppLogic
クラスからメソッドを取り消しています:
この
はGUI
クラスで何とか
def cancel(self):
self._shall_abort = True
self._thread.join(self._some_time_out)
assert self._thread.isAlive() == False
、join
とGetLabel
(とデッドロックがありますしたがって、MainLoop
?)が関与していますが、実際に何が起こっているのか分かりません。誰かがこれについてより多くの洞察を持っていますか?それは素晴らしいだろう!
'どういうわけか、参加するとデッドロックがあります' - ではない巨大な驚き、TBH :(参加()最高のGUIアプリケーションでは回避された非GUIアプリケーションでは、参加する()最高の回避さ –