124bit
Окт. 22, 2008 22:02:55
threading меня не устраивал, пришлось все быстро переписать под processing. В принципе ниче кроме замены слов и добавки processing.freezeSupport() я не делал. C threading все было норм, а вот с processing при start() вылазит
cPickle.PicklingError: Can't pickle <type ‘PySwigObject’>: attribute lookup __builtin__.PySwigObject failed
что это за ошибка? как ее обойти,?
я так понял что она связана с этой строкой в доке:
Picklability:
Ensure that the arguments to the methods of proxies are picklable.
но что это значит понять не могу.. в инглише не оч селен.
124bit
Окт. 22, 2008 23:14:40
вот..там еще чето с графическим интерфэйсом связано((
вот ошибка полностью:
cPickle.PicklingError: Can't pickle <type ‘PySwigObject’>: attribute lookup __builtin__.PySwigObject failed
File “C:\Documents and Settings\Ulik\My Documents\project\clicker\GUI.py”, line 812, in <module>
app.MainLoop()
File “C:\Python25\Lib\site-packages\wx-2.8-msw-unicode\wx\_core.py”, line 7942, in MainLoop
wx.PyApp.MainLoop(self)
File “C:\Python25\Lib\site-packages\wx-2.8-msw-unicode\wx\_core.py”, line 7267, in MainLoop
return _core_.PyApp_MainLoop(*args, **kwargs)
File “C:\Documents and Settings\Ulik\My Documents\project\clicker\GUI.py”, line 271, in Bux_selected
self.Bux_run(list_of_bux)
File “C:\Documents and Settings\Ulik\My Documents\project\clicker\GUI.py”, line 289, in Bux_run
p1.start()
File “C:\Python25\Lib\site-packages\processing\process.py”, line 96, in start
self._popen = Popen(self)
File “C:\Python25\Lib\site-packages\processing\forking.py”, line 161, in __init__
dump(process_obj, to_child, HIGHEST_PROTOCOL)
shiza
Окт. 22, 2008 23:35:18
хм. не может форкнуть GUI
Я не в теме к сожалению
124bit
Окт. 23, 2008 00:25:50
шиза, пасиба, оч жаль((..гм… думал какаято ошибка модуля processing … час переходил на python 2.6(кстати, под него есть activepython или чето такое?) в котором уже встроеный модуль multiprocessing - не помогло, таже ошибка(
люди выручайте..как проблему решить,?
опять же..супер разочаровывает работа питона с процэссами также как и с потоками(
я вот подумал, а какое отношение имеет, что я запускаю новый процесс к wxPython? они же никак не связаны(
gmorgunov
Окт. 23, 2008 01:07:54
Доброй ночи.
Судя по логу, в модуле processing все (GUI тоже) пропускается через SWIG. И не проходит.
Сам только сегодня начал разбираться с расширениями-SWIG . Пока смотрю Лутца ( у Сузи - мало).
с уважением gmorgunov
shiza
Окт. 23, 2008 01:28:51
gmorgunov
Судя по логу, в модуле processing все (GUI тоже) пропускается через SWIG. И не проходит.
Сам только сегодня начал разбираться с расширениями-SWIG . Пока смотрю Лутца ( у Сузи - мало).
Не совсем так.
WxWindows обернут через SWIG для питона.
IMHO так происходит: при форке ( запуске нового процесса) processing делает копию используемых объектов для нового процесса с помощью Pickle (типа сделал сериализацию, скопировал в новый процесс и там развернул). А вот запиклить SWIG объекты у него и не получается %)
gmorgunov
Окт. 23, 2008 01:54:31
А это как понимать:
cPickle.PicklingError: Can't pickle <type ‘PySwigObject’>: attribute lookup __builtin__.PySwigObject failed
Я понимаю, что не может она ‘PySwigObject’> запиклить ?
gmorgunov
Окт. 23, 2008 02:23:54
Извиняюсь, невнимательно прочитал пост. Да это и не суть важно - запуталась она в недрах GUI.
И вряд ли вылезет.:)
cybergrind
Окт. 23, 2008 12:04:26
ну чего.. надо помочь ему пиклить;
__getstate__
__setstate__
во все кастомные объекты, которые ты передаешь. примерно об этом и было написано в первом посте.
т.к. ты скорее всего передал чтото из wx, то копаться тебе придется в недрах wx, а конкретно PySwigObject, добавишь туда гетстейт+сетстейт – должно все заработать, если ты еще чего не передаешь.
второй выход, для тех методов где ты передаешь объекты wxPython'a - пока использовать стандартный трединг, я думаю в ближайшее время wx допишут нормальную сериализацию в пакет и можно будет заменить.
я собственно неочень понимаю почему нужно именно wx запускать не в главном треде - если ты запустишь его в главном, а все свои процессы - через мультипроцессинг, передавая только вяские дикты, инты, листы и т.п., и настроив нормальную обработку результатов на стороне гуи - то все будет работать.
124bit
Окт. 23, 2008 15:36:17
((я передал не что от wx, а self всего класса wx окна.. второй выход мне 100% не подойдет, а вот можно уточнить про __getstate__,
__setstate__ и само пиклинье как таковое вообще.. где об это можно почитать,?