将wxPython对象作为多处理器参数传递

问题描述:

我目前正在使用wxpython在使用gui编写python程序。该程序具有评估多个python的功能,因此会挂起gui。我正在尝试为此功能使用单独的进程。问题在于函数需要ui中的一些东西;一个listctrl和一个textctrl,来更新关于已经运行的脚本的信息。正由工艺运行的方法将wxPython对象作为多处理器参数传递

def CreateProcess(): 
    q = Queue() 
    q.put(gui.caselist) 
    q.put(gui.textlog) 
    p = Process(target=runScripts, args=(q,)) 
    p.start() 

部分:尝试wxPython的对象传递给过程,创建和启动过程

PicklingError: Can't pickle <type 'PySwigObject'>: attribute lookup __builtin__.PySwigObject failed 

方法时收到以下错误

def runScripts(q): 
    caselist = q.get() 
    text = q.get() 
+0

阅读[LongRunningTasks维基页面(http://wiki.wxpython.org/LongRunningTasks)关于如何做到这一点的解释和完整的示例代码。 – unutbu 2011-08-17 13:01:01

基本上,你不能。您需要将结果传回并让GUI线程更新listctrltextctrl。有关酸洗错误的信息,请参阅this mailing list thread