路傍のプログラマ

只のプログラマが綴る愚痴と備忘録

Python 2.6のmultiprocessingではまる

2008-11-12 15:15:41 | プログラミング
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、まだ不安定なのかもしれません。