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.

Était-ce utile?

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)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top