Python:如何使用多处理来加速对类实例的操作?

时间:2013-05-18 01:53:53

标签: python multiprocessing

例如:

instances = [ClassName() for i in range(no_inst)]
for data in dataset:
    for inst in instances:
        inst.dosomething(data)

注意:实例不会修改数据,因此实例之间不需要通信。

2 个答案:

答案 0 :(得分:2)

我知道的最简单的方式是使用multiprocessing.Pool.map,就像使用map内置版一样。你只需编写一个函数来完成你想要完成的任务,它就可以处理所有的并行性:

import multiprocessing as mp

instances = [ClassName() for i in range(no_inst)]

def dosomething(inst):
    for data in dataset:
        inst.dosomething(data)

num_procs = 4 #however many processors you'll use
pool = mp.Pool(num_procs)
pool.map(dosomething,instances)

有一些问题 - lambda函数在这里不起作用,因为它们不是可选择的。这也会返回None的列表(因为这是dosomething返回的内容) - 通常我不喜欢使用列表推导或map来表示副作用,但我放松了在多处理方面的立场只是因为它如此简单

答案 1 :(得分:0)

您可以使用threading界面创建一个满足Thread的{​​{1}}类。您可以为每个循环启动多个线程,调用dosomething(data)启动它们。建议将它们放入列表中,以便在完成所有操作之前检查它们的状态。