Python 2.6 Win32(xp)上的Python多处理

时间:2009-05-11 22:46:38

标签: python winapi multiprocessing python-2.6

我试图通过jesse noller的多处理讲座复制这个例子(正如另一篇SO帖子所推荐的那样)[http://pycon.blip.tv/file/1947354?filename=Pycon-IntroductionToMultiprocessingInPython630.mp4]

但由于某些原因我收到错误,好像它忽略了我的函数定义: 我在Windows XP(win32),我知道它对2.6中的多处理库有所限制,要求所有内容都是可选的

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()

输出:

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'

导致问题的错误是:AttributeError:'module'对象没有属性'sleeper'

虽然功能很简单但我无法理解什么是阻碍。

这仅用于基本概念的自学教学目的。我不是试图预先优化任何现实世界的问题。

感谢。

1 个答案:

答案 0 :(得分:4)

从回溯中看,您正在将代码直接运行到python解释器(REPL)中。

不要那样做。将代码保存在文件中,然后使用以下命令从文件运行:

python myfile.py

这将解决您的问题。


作为一个不相关的说明,这一行是错误的:

print 'Sleeping for ' + wait + ' seconds'

应该是:

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

因为你不能连接字符串和int对象(python是强类型的)