Python 2.6.7 で実行すると、次のスクリプトがハングします。[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Python 2.7 では期待どおりに出力されます。Python 2.6 のバグでしょうか? 回避策はありますか?
def p1(x):
return x + 1
class Tasks(object):
@property
def mapper(self):
from multiprocessing import Pool
pool = Pool(processes=2)
return pool.imap_unordered
def run(self):
xs = range(10)
return self.mapper(p1, xs)
ts = Tasks()
print(list(ts.run()))
私のプログラムでは、次のように書き換えるTasks.run
ことでハングを回避できました。
def run(self):
xs = range(10)
mapper = mapper
return mapper(p1, xs)
しかし、上記のスクリプトではこれを再現できませんでした。
@property
また、ここでは の使用が不可欠であることに注意してください。次のように割り当てるmapper
と__init__
、問題が解決します。
def __init__(self):
from multiprocessing import Pool
pool = Pool(processes=2)
self.mapper = pool.imap_unordered