multitraitement Python sur Python 2.6 Win32 (xp)
-
21-08-2019 - |
Question
J'ai essayé de copier cet exemple de cette conférence multitraitement par jesse Noller (tel que recommandé dans un autre SO post) [ http://pycon.blip.tv/file/1947354?filename=Pycon-IntroductionToMultiprocessingInPython630.mp4]
Mais pour une raison quelconque, je reçois une erreur, comme il est ignorant mes définitions de fonctions: Je suis sous Windows XP (win32) que je connais a des restrictions en ce qui concerne la bibliothèque multitraitement en 2.6 qui nécessite tout être pickleable
from multiprocessing import Process
import time
def sleeper(wait):
print 'Sleeping for %d seconds' % (wait,)
time.sleep(wait)
print 'Sleeping complete'
def doIT():
p = Process(target=sleeper, args=(9,))
p.start()
time.sleep(5)
p.join()
if __name__ == '__main__':
doIT()
Sortie:
Evaluating mypikklez.py
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 1126, in find_class
klass = getattr(mod, name)
AttributeError: 'module' object has no attribute 'sleeper'
L'erreur est l'origine du problème: AttributeError: objet « module » n'a pas d'attribut « dormeur »
Aussi simple d'une fonction telle qu'elle est, je ne peux pas comprendre ce que serait le hold-up.
Ceci est juste à des fins d'auto-apprentissage des concepts de base. Je ne cherche pas de pré-optimiser tout problème du monde réel.
Merci.
La solution
Semble du retraçage que vous exécutez le code directement dans l'interpréteur python (REMP).
Ne pas faire. Enregistrez le code dans un fichier et l'exécuter à partir du fichier à la place, avec la commande:
python myfile.py
Cela va résoudre votre problème.
Comme une note sans rapport, cette ligne est erroné:
print 'Sleeping for ' + wait + ' seconds'
Il devrait être:
print 'Sleeping for %d seconds' % (wait,)
Parce que vous ne pouvez pas concaténer chaîne et objets int (python est fortement typée)