Skip to main content
 首页 » 编程设计

python之通过文件路径导入模块时使用 Python 多处理

2025年05月04日11myhome

我正在编写一个使用文件路径导入模块的程序,函数为 imp.load_source(module_name,module_path)。当我尝试将对象从该模块传递到 Process 时,这似乎会导致问题。

一个例子:

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 中,代替 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 

那我该怎么办?

编辑:

我在 Win XP 上使用 Python 2.6.2c1。

请您参考如下方法:

可能因为将导入代码放入主 block 而无法正常工作。 下面的代码适用于 Windows XP、Python 2.6。那么life模块也会在新进程中导入。

import multiprocessing 
import imp 
 
class MyProcess(multiprocessing.Process): 
  def __init__(self,thing): 
    multiprocessing.Process.__init__(self) 
    self.thing=thing 
  def run(self): 
    print("Exiting self.thing") 
    self.thing() 
    print("Finished") 
 
life=imp.load_source('life', r'd:\temp5\life.py') 
 
if __name__=="__main__": 
  p=MyProcess(life.step) 
  p.start()