Pregunta

I intentado copiar este ejemplo de esta conferencia Multiprocessing por Jesse Noller (como se recomienda en otro SO post) [ http://pycon.blip.tv/file/1947354?filename=Pycon-IntroductionToMultiprocessingInPython630.mp4]

Pero por alguna razón estoy recibiendo un error, como si estuviera haciendo caso omiso de mis definiciones de funciones: Estoy en Windows XP (Win32) , que sé que tiene restricciones en lo que respecta a la biblioteca de multiprocesamiento en 2.6 que requiere todo ser 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()

Salida:

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'

El error causando el problema es: AttributeError: 'módulo' objeto no tiene atributo 'durmiente'

A medida simple de una función que es que no puedo entender lo que sería el atraco.

Esto es sólo para fines de auto-aprendizaje de conceptos básicos. No estoy tratando de comprobar la validez de optimizar cualquier problema del mundo real.

Gracias.

¿Fue útil?

Solución

Parece a partir de la traza que está ejecutando el código directamente en el intérprete de python (REPL).

No hacer eso. Guarde el código en un archivo y ejecutarlo desde el archivo en su lugar, con el comando:

python myfile.py

que va a resolver su problema.


Como nota relacionada, esta línea es incorrecto:

print 'Sleeping for ' + wait + ' seconds'

Debe ser:

print 'Sleeping for %d seconds' % (wait,)

Porque no se puede concatenar cadenas y objetos int (pitón es fuertemente tipado)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top