Python 2.6 Win32 (xp) での Python マルチプロセッシング
-
21-08-2019 - |
質問
この例は、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 は厳密に型指定されています)
所属していません StackOverflow