Je suis en train d'écrire un programme qui importe un module en utilisant un chemin de fichier, avec la fonction imp.load_source(nom_module, chemin_module)
. Cela semble poser problème lorsque j'essaie de passer des objets de ce module dans un Process
.
Un exemple:
import multiprocessing
import imp
class MyProcess(multiprocessing.Process):
def __init__(self,chose):
multiprocessing.Process.__init__(self)
self.chose=chose
def run(self):
x=self.chose
if __name__=="__main__":
module=imp.load_source('life', 'C:\\Documents and Settings\\User\\workspace\\GarlicSim\\src\\simulations\\life\\life.py')
chose=module.step
print(chose)
p=MyProcess(chose)
p.start()
Note: pour que ce code "fonctionne", vous devez substituer les paramètres que j'ai donnés à imp.load_source
par quelque chose d'autre : Il doit s'agir d'un fichier Python sur votre ordinateur, de préférence pas dans le même dossier. Ensuite, dans chose=module.step
, au lieu de step, mettez une fonction ou une classe aléatoire qui est définie dans ce fichier .py
.
Je reçois la trace suivante:
Traceback (most recent call last):
File "", line 1, in
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
Que dois-je faire ?
EDIT:
Je suis en train d'utiliser Python 2.6.2c1 sur Win XP.