Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 22, 2008 22:02:55

124bit
От:
Зарегистрирован: 2008-04-10
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

processing Picklability

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.

но что это значит понять не могу.. в инглише не оч селен.



Отредактировано (Окт. 22, 2008 22:03:50)

Офлайн

#2 Окт. 22, 2008 23:14:40

124bit
От:
Зарегистрирован: 2008-04-10
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

processing Picklability

вот..там еще чето с графическим интерфэйсом связано((
вот ошибка полностью:

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)



Офлайн

#3 Окт. 22, 2008 23:35:18

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

processing Picklability

хм. не может форкнуть GUI
Я не в теме к сожалению



Отредактировано (Окт. 22, 2008 23:37:54)

Офлайн

#4 Окт. 23, 2008 00:25:50

124bit
От:
Зарегистрирован: 2008-04-10
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

processing Picklability

шиза, пасиба, оч жаль((..гм… думал какаято ошибка модуля processing … час переходил на python 2.6(кстати, под него есть activepython или чето такое?) в котором уже встроеный модуль multiprocessing - не помогло, таже ошибка(

люди выручайте..как проблему решить,?
опять же..супер разочаровывает работа питона с процэссами также как и с потоками(


я вот подумал, а какое отношение имеет, что я запускаю новый процесс к wxPython? они же никак не связаны(



Отредактировано (Окт. 23, 2008 00:42:26)

Офлайн

#5 Окт. 23, 2008 01:07:54

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

processing Picklability

Доброй ночи.
Судя по логу, в модуле processing все (GUI тоже) пропускается через SWIG. И не проходит.
Сам только сегодня начал разбираться с расширениями-SWIG . Пока смотрю Лутца ( у Сузи - мало).

с уважением gmorgunov



Офлайн

#6 Окт. 23, 2008 01:28:51

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

processing Picklability

gmorgunov
Судя по логу, в модуле processing все (GUI тоже) пропускается через SWIG. И не проходит.
Сам только сегодня начал разбираться с расширениями-SWIG . Пока смотрю Лутца ( у Сузи - мало).
Не совсем так.
WxWindows обернут через SWIG для питона.
IMHO так происходит: при форке ( запуске нового процесса) processing делает копию используемых объектов для нового процесса с помощью Pickle (типа сделал сериализацию, скопировал в новый процесс и там развернул). А вот запиклить SWIG объекты у него и не получается %)



Отредактировано (Окт. 23, 2008 01:29:36)

Офлайн

#7 Окт. 23, 2008 01:54:31

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

processing Picklability

А это как понимать:
cPickle.PicklingError: Can't pickle <type ‘PySwigObject’>: attribute lookup __builtin__.PySwigObject failed

Я понимаю, что не может она ‘PySwigObject’> запиклить ?



Офлайн

#8 Окт. 23, 2008 02:23:54

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

processing Picklability

Извиняюсь, невнимательно прочитал пост. Да это и не суть важно - запуталась она в недрах GUI.
И вряд ли вылезет.:)



Офлайн

#9 Окт. 23, 2008 12:04:26

cybergrind
От:
Зарегистрирован: 2008-01-21
Сообщения: 201
Репутация: +  0  -
Профиль   Отправить e-mail  

processing Picklability

ну чего.. надо помочь ему пиклить;
__getstate__
__setstate__
во все кастомные объекты, которые ты передаешь. примерно об этом и было написано в первом посте.

т.к. ты скорее всего передал чтото из wx, то копаться тебе придется в недрах wx, а конкретно PySwigObject, добавишь туда гетстейт+сетстейт – должно все заработать, если ты еще чего не передаешь.

второй выход, для тех методов где ты передаешь объекты wxPython'a - пока использовать стандартный трединг, я думаю в ближайшее время wx допишут нормальную сериализацию в пакет и можно будет заменить.
я собственно неочень понимаю почему нужно именно wx запускать не в главном треде - если ты запустишь его в главном, а все свои процессы - через мультипроцессинг, передавая только вяские дикты, инты, листы и т.п., и настроив нормальную обработку результатов на стороне гуи - то все будет работать.



Офлайн

#10 Окт. 23, 2008 15:36:17

124bit
От:
Зарегистрирован: 2008-04-10
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

processing Picklability

((я передал не что от wx, а self всего класса wx окна.. второй выход мне 100% не подойдет, а вот можно уточнить про __getstate__,
__setstate__ и само пиклинье как таковое вообще.. где об это можно почитать,?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version