質問

この例は、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'

問題の原因となっているエラーは次のとおりです。属性エラー:「モジュール」オブジェクトには属性「スリーパー」がありません

機能は単純ですが、何が問題になるのか理解できません。

これは、基本的な概念を独習することのみを目的としています。私は現実世界の問題を事前に最適化しようとしているわけではありません。

ありがとう。

役に立ちましたか?

解決

トレースバックから、コードを Python インタープリター (REPL) に直接実行しているようです。

そんなことはしないでください。コードをファイルに保存し、代わりに次のコマンドを使用してファイルから実行します。

python myfile.py

それで問題は解決します。


関係のないメモですが、次の行は間違っています。

print 'Sleeping for ' + wait + ' seconds'

そのはず:

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

string オブジェクトと int オブジェクトを連結できないため (Python は厳密に型指定されています)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top