Skip to main content
 首页 » 编程设计

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

2024年08月12日31itcoder

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

但由于某种原因,我遇到了一个错误,就好像它忽略了我的函数定义一样: 我使用的是 Windows XP (win32) 我知道它对 2.6 中的多处理库有限制,要求一切都可以 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() 

输出:

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' object has no attribute 'sleeper'

虽然功能很简单,但我不明白会出现什么问题。

这只是为了基本概念的自学目的。我并不是要预先优化任何现实世界的问题。

谢谢。

请您参考如下方法:

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

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

python myfile.py 

这将解决您的问题。


作为一个不相关的注释,这一行是错误的:

print 'Sleeping for ' + wait + ' seconds' 

应该是:

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

因为不能拼接string和int对象(python是强类型的)