Python/wxPython:在后台持续工作

Ram*_*hum 12 python multithreading wxpython background

我正在制作一个用Python运行模拟的程序,带有一个wxPython接口.在程序中,您可以创建模拟,程序为您渲染(=计算)它.有时渲染可能非常耗时.

当用户启动模拟并定义初始状态时,我希望程序在后台连续渲染模拟,而用户可能在程序中执行不同的操作.有点类似于填充的YouTube风格的条形图:您可以仅在渲染点进行模拟.

我该如何运行渲染功能?

Fog*_*ird 7

我会使用a 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
Run Code Online (Sandbox Code Playgroud)


Joh*_*ery 7

wxPython wiki上有很多关于可能有用的长期运行任务的信息.它们基本上使用线程并wx.PostEvent处理线程和主wx事件循环之间的通信.


Chr*_*rch 4

启动一个新进程在后台渲染并定期检查它是否已返回。

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

虽然子进程/多进程是执行此操作的标准方法,但您可能还想看看Parallel Python