首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用wxPython的多处理没有响应

使用wxPython的多处理没有响应
EN

Stack Overflow用户
提问于 2013-07-30 15:36:26
回答 1查看 504关注 0票数 1

我使用wxPython作为数据采集系统的前端,后端使用PyDAQmx与国家仪器卡接口。

当调用循环来收集数据时,显然gui会阻塞,所以我使用threading.Thread将采集模块放在一个单独的线程中。然而,数据的输入速度如此之快,以至于我们实际上需要一个以上的核心,我认为threading.Thread无法做到这一点。

接下来,我尝试使用multiprocessing.Process & Queue生成一个单独的进程来报告数据,非常简单,如

代码语言:javascript
复制
captureProcess = Process(target=acquire, args=(self.settings, self.queue,))
captureProcess.start()

将数据向下发送到队列中。

代码语言:javascript
复制
queue.put( (i, j, c, aiData.value) )

又拿起了

代码语言:javascript
复制
(scan, interval, count, ai) = queue.get()

现在,奇怪的一点是,gui不阻止我可以在主wx.Frame上更新一些pyplot图,但是与它的任何交互(单击菜单等)都会立即导致程序失去响应和崩溃。有没有人知道为什么会这样,或者有什么解决办法?

非常感谢你的帮助。我在Windows 7上使用anaconda。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-30 19:32:59

绝对确保在线程中没有,没有 GUI交互,在GUI中也没有直接的线程交互。GUI可以调用线程中的setter函数来更改线程定期检查的成员值,并且线程可以通过提交事件和附加数据来导致GUI结果。

wxPython的一个可爱特性是,自定义事件可以为您携带任何类型的数据。

队列的一个特性是,如果插槽满了,它就会挂起,当GUI处理菜单单击之类的事情时,您将不会为您的队列提供服务,我怀疑您已经溢出了--您应该捕捉到完全的异常,并做一些类似于丢弃数据和设置数据丢失标志的操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17951402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档