使用并行工具改变类的值?

时间:2017-12-18 22:27:41

标签: python python-multiprocessing

我在类中有一个函数,它计算一些值并将其附加到类字段:

import multiprocessing
class Foo:
    def __init__(self):
        self.items = [23, 42]

    def bar_parallel(self):
        print("hello")
        with multiprocessing.Pool() as p:
            p.map(self.bla, range(200))

    def bar_serial(self):
        print("hello")
        for i in range(200):
            self.bla(i)

    def bla(self, x):
        self.items.append(x**2)


if __name__ == "__main__":
    f = Foo()

    print(f.items)
    f.bar_parallel()
    print(f.items)

多处理在这里不起作用,因为它在每个进程中创建新对象,因此上面脚本的结果始终是:

[23, 42]
hello
[23, 42]

是否有可能与bar_serial具有相同的行为但是并行化?

这种方法可行,但有没有办法避免它,即让bla直接写入成员?

def bar_parallel_works(self):
    with multiprocessing.Pool() as p:
        self.items.extend(p.map(self.bla_fixed, range(200))

def bla_fixed(self, x):
    return x**2

0 个答案:

没有答案