我在类中有一个函数,它计算一些值并将其附加到类字段:
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