Передача объектов wxPython в качестве многопроцессорных аргументов - PullRequest
2 голосов
/ 17 августа 2011

В настоящее время я пишу программу на python с графическим интерфейсом, используя wxpython. В программе есть функция, которая оценивает несколько сценариев pythonscript и поэтому отключает графический интерфейс. Я пытаюсь использовать отдельный процесс для этой функции. Проблема в том, что функции нужно несколько вещей из пользовательского интерфейса; listctrl и textctrl, чтобы обновить информацию о запущенных сценариях. Следующая ошибка получена при попытке передать объекты wxpython процессу

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

Метод, который создает и запускает процесс:

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

Часть метода, который запускается процессом:

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

1 Ответ

2 голосов
/ 17 августа 2011

В принципе, вы не можете. Вам нужно передать результаты обратно и позволить потоку графического интерфейса обновить listctrl и textctrl.

См. эту ветку списка рассылки для получения информации об ошибке травления.

...