2009-04-08 20 views
12

我正在用一個wxPython接口製作一個在Python中運行模擬的程序。在程序中,你可以創建一個模擬,程序爲你渲染(=計算)它。渲染可能會非常耗時。Python/wxPython:在後臺連續工作

當用戶開始模擬並定義初始狀態時,我希望程序在後臺持續渲染模擬,而用戶可能在程序中做了不同的事情。有點像填滿了YouTube風格的欄:您可以僅在渲染的點上播放模擬。

我該如何運行渲染功能?

回答

4

啓動一個新的進程在後臺進行渲染並定期檢查它是否返回。

您可以找到子過程模塊here和多處理模塊here的文檔。正如Jay所說,如果您使用Python 2.6,多進程可能會更好。也就是說,我不認爲兩者之間會有任何性能差異。多進程似乎是子進程的一個包裝,使得某些事情更容易完成。

儘管子流程/多進程是執行此操作的標準方式,但您也可以查看Parallel Python

+0

我從來沒有使用過多個進程。我從哪說起呢?另外,我明白有不同的方法。我應該選擇哪一個? – 2009-04-08 16:04:03

7

我會使用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 
0

如果你不介意使用一個非常略有不同的方法,你可以看看stackless蟒蛇,併爲您呈現過程的微進程。我發現個人使用非常簡單。