Ram*_*hum 12 python multithreading wxpython background
我正在制作一个用Python运行模拟的程序,带有一个wxPython接口.在程序中,您可以创建模拟,程序为您渲染(=计算)它.有时渲染可能非常耗时.
当用户启动模拟并定义初始状态时,我希望程序在后台连续渲染模拟,而用户可能在程序中执行不同的操作.有点类似于填充的YouTube风格的条形图:您可以仅在渲染点进行模拟.
我该如何运行渲染功能?
我会使用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)
启动一个新进程在后台渲染并定期检查它是否已返回。
您可以在此处找到子进程模块的文档,在此处找到多进程模块的文档文档。正如 Jay 所说,如果您使用 Python 2.6,多进程可能会更好。也就是说,我认为两者之间不会有任何性能差异。多进程似乎只是子进程的包装,使某些事情更容易完成。
虽然子进程/多进程是执行此操作的标准方法,但您可能还想看看Parallel Python。