利用线程防止wxpython假死

前段时间我编写了一个工业控制的软件,在使用中一直存在一个问题,就是当软件检索设备时,因为这个功能执行的时间比较长,导致GUI界面假死,让用户分辨不清楚软件到底仍在执行,还是真的挂掉了。(虽然我设计了同步log显示,但是这个也同样假死了)

上午抽空学习了一下在wxpython中启用线程的方法,将GUI和功能的执行分开,果然程序运行起来杠杠滴。因为我那个软件的代码暂时不能公开,这里专门写个小程序,作为今天的笔记吧。程序截图如下:

wxpython-threading

代码解析如下:

time库用来执行定时函数,模拟需要长时间执行的功能。Publisher用来在线程间传输消息。

TestThread的__init__函数,定义线程实例化时就启动,run函数就是需要长时间执行的程序。
wx.CallAfter与Publisher().sendMessage用来向GUI发送消息。

这个就是GUI的主程序,__init__中使用Publisher().subscribe(self.updateDisplay, “update”)声明了获取线程消息以及显示的方法。

最后将窗口MyForm(None).Show()显示出来,程序就完成了。

发布者

Leniy

Do not , for one repulse , give up the purpose that you resolved to effect . 本文著作版权归Leniy所有,并受法律保护。 转载、使用整体或任何部分的内容(包含但不限于各个页面的标题、评论框提示语)须经过Leniy的授权。 CopyRight © 2006-2017 Leniy.org all rights reserved.

《利用线程防止wxpython假死》有26个想法

  1. 这几天正好在用Python,我拿python写了计算模块,上面放了C#+WinForm的GUI,我估计这么奇葩的结构也就我这种非专业码农且啥玩意不会的人才会用…….

  2. wxpython,百度学习了下。貌似现在这个什么PYTHON语言很火。可是看兼容性最终的程序不能在64位WIN下运行啊??

    1. 你实际操作下就知道了,py程序只要不调用某个系统的专有库,在任何系统下的运行效果都是一样的。

    2. 我写的一个工控软件,就同时在win7_64位、win7_32位、winXP_32位、Linux_32位下运行。已经稳定运行4个多月了。

    1. 这个是gui程序的基础。只不过我以前都是写没有窗口的单线程程序,所以才专门学习了下这个东东。

    1. 之前处理异常时,发现顶多等待1秒,就没考虑,结果实际使用中经常需要等待1分钟。

    1. 线程还好啦,就是相互的通讯麻烦些。还好wxpython直接提供了进程间通讯机制

      1. 因为用户大多都是因为更新所以才来,而不是来源于搜索引擎,后者的话会很稳定

        1. 我最近忙得要死,没时间弄东西,自然也就没有文章可写啊……

        2. 表示我的来访更多是来自搜索引擎 — 我都嫉妒我自己的某几篇post,要是都那样该多好。

          1. 我搜索我的几篇热门文章,baidu和google首位的都是采集站的地址

        1. 不清楚哎。我失踪是因为工作太繁忙以及生孩子,你是因为什么?

发表评论

电子邮件地址不会被公开。 必填项已用*标注