[英]wxpython Python knowing when threads have finished -> stuck
我正在继续我的计算机检查程序。 它是基于 WXPYTHON 的。
该程序显示一个带有标签的界面和一个“运行”按钮,当单击该按钮时,它会在主框架 class 中启动“doCheck”function
doCheck 然后启动所有线程:
Thread1 = computerCheck()
Thread2 = countProcess()
Thread3 = findProcess()
Thread4 = findProtection()
Thread5 = bitlockerCheck()
Thread1.start()
Thread2.start()
Thread3.start()
Thread4.start()
Thread5.start()
线程正在执行一些 WMI 检查等并通过使用 pubsub.sendMessage() 报告 MainFrame class 有一个侦听器 function ,它在收到消息时更新 GUI 标签。
到目前为止,一切都很好。 艾利斯运作良好。 但是现在我想知道所有启动的线程何时完成。 这就是问题所在..,如果我在线程上使用 join() 。 PUBSUB GUI 更新直到所有线程都完成后才起作用,如果我在 doCheck function 中使用 while 语句循环“isAlive()”,它基本上是一样的。 再次等待一切结束。 PUBSUB 也停止了...
所以我被困在这里。 到目前为止,该程序运行良好,但现在我需要在所有检查完成/完成后启动下一步,但我无法弄清楚如何在不阻止 PUBSUB 阻止运行时更新的情况下完成此操作......
实际线程的片段:
class findProcess(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
my_object = dict(status='Running', result='')
wx.CallAfter(pub.sendMessage, 'testListener', message=3,arg2=my_object)
附言。 message 参数用于知道应该更新哪些标签...
有什么建议么? 我可以在需要时发布更多代码。
谢谢
解决方案之一可能是:
启动另一个将加入的线程,当所有线程都加入时,向主线程发布消息。 根据该消息,您知道线程已完成,您可以 go 继续工作......
或者,这个有点骇人听闻:制作一个 function,它将每 100 毫秒检查一次所有线程的 is_alive。 像这样的东西:
def check_threads_finished(self):
for i in self.my_threads:
if i.is_alive():
wx.CallLater(100, self.check_threads_finished)
return
# finished
self.do_whatever_is_needed_after_threads_finished()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.