2

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
4

1 に答える 1