многопроцессорный подпроцесс работает на Linux, но не на Windows

Я пытаюсь заставить python-gasp работать в Windows, но когда я import gasp; gasp.begin_graphics() import gasp; gasp.begin_graphics() Я получаю следующую трассировку:

  File "C:\Python26\lib\site-packages\gasp\backend.py", line 142, in create_screen screen.updater.start() File "C:\Python26\lib\multiprocessing\process.py", line 104, in start self._popen = Popen(self) File "C:\Python26\lib\multiprocessing\forking.py", line 239, in __init__ dump(process_obj, to_child, HIGHEST_PROTOCOL) File "C:\Python26\lib\multiprocessing\forking.py", line 162, in dump ForkingPickler(file, protocol).dump(obj) File "C:\Python26\lib\pickle.py", line 224, in dump self.save(obj) File "C:\Python26\lib\pickle.py", line 331, in save self.save_reduce(obj=obj, *rv) File "C:\Python26\lib\pickle.py", line 419, in save_reduce save(state) File "C:\Python26\lib\pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "C:\Python26\lib\pickle.py", line 649, in save_dict self._batch_setitems(obj.iteritems()) File "C:\Python26\lib\pickle.py", line 681, in _batch_setitems save(v) File "C:\Python26\lib\pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "C:\Python26\lib\pickle.py", line 725, in save_inst save(stuff) File "C:\Python26\lib\pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "C:\Python26\lib\pickle.py", line 649, in save_dict self._batch_setitems(obj.iteritems()) File "C:\Python26\lib\pickle.py", line 681, in _batch_setitems save(v) File "C:\Python26\lib\pickle.py", line 331, in save self.save_reduce(obj=obj, *rv) File "C:\Python26\lib\pickle.py", line 396, in save_reduce save(cls) File "C:\Python26\lib\pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "C:\Python26\lib\pickle.py", line 748, in save_global (obj, module, name)) PicklingError: Can't pickle <class 'multiprocessing.process._MainProcess'>: it's not found as multiprocessing.process._MainProcess 

Любая идея, почему я получаю эту ошибку в Windows XP, но не на Ubuntu Linux 9.04?

Похоже, screen.updater является экземпляром Updater(multiprocessing.Process) ( def ), если это помогает. Этот файл находится по адресу http://bazaar.launchpad.net/~gasp-dev/gasp-core/main/annotate/head%3A/gasp/backend.py

One Solution collect form web for “многопроцессорный подпроцесс работает на Linux, но не на Windows”

У вашего класса Updater есть screen участника, который сам имеет членский process который получает значение multiprocessing.current_process() .

Когда вы вызываете updater.start() , он пытается разжечь программу обновления. Это происходит только в Windows, потому что Linux использует fork() вместо травления. Однако объект текущего процесса не может быть маринован, и возникает исключение.

Чтобы исправить это, вы можете удалить член process .

Python - лучший язык программирования в мире.