代码之家  ›  专栏  ›  技术社区  ›  Ram Rachum

Python/wxPython:在后台连续工作

  •  12
  • Ram Rachum  · 技术社区  · 15 年前

    当用户开始模拟并定义初始状态时,我希望程序在后台连续呈现模拟,而用户可能在程序中执行不同的操作。有点像YouTube风格的填充栏:您只能播放模拟到渲染的点。

    4 回复  |  直到 15 年前
        1
  •  7
  •   FogleBird    15 年前

    我会用一个 threading.Thread 在后台运行代码 wx.CallAfter 将更新发布到我的窗口线程以将其呈现给用户。

    thread = threading.Thread(target=self.do_work)
    thread.setDaemon(True)
    thread.start()
    
    ...
    
    def do_work(self):
        # processing code here
        while processing:
            # do stuff
            wx.CallAfter(self.update_view, args, kwargs)
    
    def update_view(self, args):
        # do stuff with args
        # since wx.CallAfter was used, it's safe to do GUI stuff here
    
        2
  •  7
  •   John Montgomery    15 年前

    有很多关于 wxPython wiki about long running tasks wx.PostEvent 处理线程和主wx事件循环之间的通信。

        3
  •  4
  •   Chris Upchurch    15 年前

    启动要在后台渲染的新进程,并定期检查该进程是否已返回。

    您可以找到子流程模块的文档 here here . 正如Jay所说,如果使用Python 2.6,多进程可能更好。也就是说,我认为这两者之间不会有任何性能差异。多进程似乎只是子进程的包装器,使某些事情更容易做。

    虽然子流程/多流程是实现这一点的标准方法,但您可能还需要看一看 Parallel Python .

        4
  •  0
  •   attwad    15 年前

    stackless python并为渲染过程创建一个tasklet。我觉得个人使用很容易。