繁体   English   中英

wxpython Python 知道线程何时完成 -> 卡住

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM