Python 2.6のmultiprocessingモジュールのPoolを試してみました。
# 動作環境は、Windows Vista、Python 2.6、両方とも32bitです。
どうやら、apply_asyncの最初の引数として、ローカルにdefした関数を渡すとこけるようです。
くわばらくわばら。
実証コードを以下に。
---------------------------------------
import multiprocessing
def fg(x): print x * x
def test():
pool = multiprocessing.Pool(4)
def ff(x): print x * x
for i in xrange(100):
#pool.apply_async(fg, [ i ]) # これはOK
pool.apply_async(ff, [ i ]) # こける
pool.close()
pool.join()
if __name__ == '__main__':
test()
---------------------------------------
(追記)
公式サイトのバグリストに、似たような記述がありました。
http://bugs.python.org/issue3272
Poolのメソッドにlambdaを渡すとこける、という内容。
multiprocessing、まだ不安定なのかもしれません。
# 動作環境は、Windows Vista、Python 2.6、両方とも32bitです。
どうやら、apply_asyncの最初の引数として、ローカルにdefした関数を渡すとこけるようです。
くわばらくわばら。
実証コードを以下に。
---------------------------------------
import multiprocessing
def fg(x): print x * x
def test():
pool = multiprocessing.Pool(4)
def ff(x): print x * x
for i in xrange(100):
#pool.apply_async(fg, [ i ]) # これはOK
pool.apply_async(ff, [ i ]) # こける
pool.close()
pool.join()
if __name__ == '__main__':
test()
---------------------------------------
(追記)
公式サイトのバグリストに、似たような記述がありました。
http://bugs.python.org/issue3272
Poolのメソッドにlambdaを渡すとこける、という内容。
multiprocessing、まだ不安定なのかもしれません。