Python multiprocessing on Python 2.6 Win32 (xp)

跟風遠走 提交于 2019-12-02 04:56:22

问题


I tried to copy this example from this Multiprocessing lecture by jesse noller (as recommended in another SO post)[http://pycon.blip.tv/file/1947354?filename=Pycon-IntroductionToMultiprocessingInPython630.mp4]

But for some reason I'm getting an error, as though it's ignoring my function definitions: I'm on Windows XP (win32) which I know has restrictions with regards to the multiprocessing library in 2.6 that requires everything be 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()

Output:

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'

The error causing the issue is : AttributeError: 'module' object has no attribute 'sleeper'

As simple of a function as it is I can't understand what would be the hold up.

This is just for self-teaching purposes of basic concepts. I'm not trying to pre-optimize any real world issue.

Thanks.


回答1:


Seems from the traceback that you are running the code directly into the python interpreter (REPL).

Don't do that. Save the code in a file and run it from the file instead, with the command:

python myfile.py

That will solve your issue.


As an unrelated note, this line is wrong:

print 'Sleeping for ' + wait + ' seconds'

It should be:

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

Because you can't concatenate string and int objects (python is strongly typed)



来源:https://stackoverflow.com/questions/850424/python-multiprocessing-on-python-2-6-win32-xp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!