我正在編寫一個程序,它使用文件路徑導入模塊,並使用函數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