我在多处理中使用以下类模板:
class MyClass
def __init__(self):
self.some_counter = 0
def use_this_class(self, input):
if some_function(input):
self.some_counter += 1
由于每个进程接收其他input
变量,因此self.some_counter
的值对于不同的进程是不同的。当我在执行过程中打印它时,我可以看到所有进程的打印,例如:
6
7
8
4
5
6
9
10
我想在打印前将进程之间的self.some_counter
值相加。我不喜欢使用进程之间共享的全局变量,因为它可能会增加执行时间。相反,我希望每N(非常大)次调用self.use_this_class
就对这些值求和一次。
我该怎么做?
谢谢。
不需要使用共享内存或托管对象,也不需要使用全局变量(无论如何,全局变量不能在进程之间共享)。事实上,我根本不会为MyClass
类操心,因为不会保留任何状态。只需使用一个简单的函数,根据some_function
返回的内容返回0或1,然后将所有结果值相加。例如,
def some_function(x):
return x % 2
def worker(x):
return 1 if some_function(x) else 0
# Required for Windows
if __name__ == '__main__':
from multiprocessing import Pool
pool = Pool()
print(sum(pool.map(worker, range(20))), 'calls to some_function returned True')
pool.close()
pool.join()
打印:
10 calls to some_function returned True