Python:将GUI流程与核心逻辑流程分开

Ram*_*hum 13 python user-interface user-experience multiprocessing

我正在开发一个用于处理计算机模拟的Python项目,我也在为它开发GUI.(核心逻辑本身不需要GUI.)我使用的GUI工具包是wxPython,但我认为我的问题很普遍,不依赖于它.

GUI当前工作的方式是它garlicsim在与GUI相同的进程和相同的线程上启动核心逻辑包(被调用).这是有效的,但我理解这是一个有问题的方法,因为如果核心逻辑需要做一些硬计算,GUI将挂起,我认为这是不可接受的.

我该怎么办?

我听说过在GUI的单独进程上启动核心逻辑的选项.这听起来很有趣,但我对此有很多疑问.

  1. 我是否使用multiprocessing包或subprocess包来启动新流程?
  2. 如何从GUI过程轻松访问模拟数据?毕竟,它将存储在另一个进程中.用户应该能够轻松顺畅地浏览模拟的时间线.如何才能做到这一点?

ron*_*ron 6

您可能会在这里找到一些灵感:http://wiki.wxpython.org/LongRunningTasks,但它适用于多线程,而不是多处理.

基本的想法

  • 对于多线程:使用事件队列在GUI和处理线程之间进行通信.
  • 对于多:也许使用包,并使用标准输入/输出的子进程与之通信.为此你需要一个命令行api,但它最终会派上用场,因为你可以进行gui独立的单元测试.

您甚至可以通过套接字驱动I/O通信,这样可以轻松进行模拟的网络管理.

编辑:我刚看到你提到的2.6新多处理包.看起来不错,你可以使用队列在进程之间进行通信.这是一种更紧密的耦合,您可以根据您的需求进行选择.