Я не смог найти ответ на эту запутанную дилемму, и мне интересно, не является ли она источником неузнаваемой для меня ошибки. Я работаю на 64-битной Windows 7 и в настоящее время пишу игру, в которой основной процесс должен иметь возможность порождать несколько процессов с использованием модуля многопроцессорности. Затем каждый из этих подпроцессов также порождает один дополнительный процесс, который запускает графическую библиотеку с помощью модуля Multiprocessing.
Когда я пытаюсь запустить скрипт (как из IDLE, так и запуская файл из командной строки), я получаю трассировку, которая гласит:
Traceback (most recent call last):
File "C:\Users\David\Desktop\Py\split\multiverse.py", line 141, in multiButtonPress
self.universeList[0].start()
File "C:\Python27\lib\multiprocessing\process.py", line 130, in start
self._popen = Popen(self)
File "C:\Python27\lib\multiprocessing\forking.py", line 277, in __init__
dump(process_obj, to_child, HIGHEST_PROTOCOL)
File "C:\Python27\lib\multiprocessing\forking.py", line 199, in dump
ForkingPickler(file, protocol).dump(obj)
File "C:\Python27\lib\pickle.py", line 224, in dump
self.save(obj)
File "C:\Python27\lib\pickle.py", line 331, in save
self.save_reduce(obj=obj, *rv)
File "C:\Python27\lib\pickle.py", line 419, in save_reduce
save(state)
File "C:\Python27\lib\pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "C:\Python27\lib\pickle.py", line 649, in save_dict
self._batch_setitems(obj.iteritems())
File "C:\Python27\lib\pickle.py", line 681, in _batch_setitems
save(v)
File "C:\Python27\lib\pickle.py", line 306, in save
rv = reduce(self.proto)
File "C:\Python27\lib\multiprocessing\managers.py", line 484, in __reduce__
return type(self).from_address, \
AttributeError: type object 'SyncManager' has no attribute 'from_address'
SyncManager — это класс из библиотеки многопроцессорной обработки. Является ли тот факт, что мой подпроцесс содержит объект, который является экземпляром Process, влияет на его возможность выбора? Если да, то есть ли способ исправить это без полной переделки системы?
multiprocessing.Manager
? Это ребенокSyncManager
27.05.2014