Я пишу программу, которая импортирует модуль, используя путь к файлу, с функцией imp.load_source(module_name,module_path)
. Кажется, это создает проблему, когда я пытаюсь передать объекты из этого модуля в Process
.Использование многопроцессорности Python при импорте модуля через путь к файлу
Пример:
import multiprocessing
import imp
class MyProcess(multiprocessing.Process):
def __init__(self,thing):
multiprocessing.Process.__init__(self)
self.thing=thing
def run(self):
x=self.thing
if __name__=="__main__":
module=imp.load_source('life', 'C:\\Documents and Settings\\User\\workspace\\GarlicSim\\src\\simulations\\life\\life.py')
thing=module.step
print(thing)
p=MyProcess(thing)
p.start()
Примечание: для этого кода «работа», вы должны заменить параметры, которые я дал, чтобы imp.load_source
с чем-то другим: Он должен быть какой-то файл Python на компьютере, желательно не в той же папке. Затем в thing=module.step
вместо шага введите некоторую случайную функцию или класс, определенный в файле .py
.
Я получаю следующее отслеживающий:
<function step at 0x00D5B030>
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Python26\lib\multiprocessing\forking.py", line 342, in main
self = load(from_parent)
File "C:\Python26\lib\pickle.py", line 1370, in load
return Unpickler(file).load()
File "C:\Python26\lib\pickle.py", line 858, in load
dispatch[key](self)
File "C:\Python26\lib\pickle.py", line 1090, in load_global
klass = self.find_class(module, name)
File "C:\Python26\lib\pickle.py", line 1124, in find_class
__import__(module)
ImportError: No module named life
Так что мне делать?
EDIT:
Я использую Python 2.6.2c1 на Win XP.
Я скопировал свой код, изменяя только ' '/ TMP/life.py'' к'' TMP \\ life.py'', (я на Windows XP.) я получаю отслеживающий который, я думаю, такой же, как тот, что в моем вопросе, с этим модулем «pickle» в конце. Может быть, это происходит только в Windows? (Примечание: я использую Python 2.6.2c1) –
Использование ubuntu Jaunty 9.04 с python по умолчанию (Python 2.6.2 release26-maint, 19.04.2009, 01:56:41). Не знаю, если это только окна, у меня нет окон, доступных для тестирования. Обратите внимание, что вы также можете использовать косые черты /tmp/life.py на окнах, не нужно менять их на обратные косые черты. – nosklo