我正在编写一个程序,它使用文件路径导入模块,并使用函数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
所以,我该怎么办?
编辑:
我使用Python 2.6.2c1在Win XP。
我复制你的代码,只有改变' '的/ tmp/life.py'`到`' TMP \\ life.py'`,(我在Windows XP上。) 我得到一个回溯我认为这与我的问题是一样的,最后是“pickle”模块。也许它只发生在Windows上? (注意:我正在使用Python 2.6.2c1) – 2009-05-06 12:05:04
使用带默认python的ubuntu Jaunty 9.04(Python 2.6.2 release26-maint,Apr 19 2009,01:56:41)。不知道它是否仅限于Windows,我没有可用于测试的窗口。请注意,您也可以在Windows上使用正斜杠/tmp/life.py,无需将其更改为反斜杠。 – nosklo 2009-05-06 12:14:46