例如:
instances = [ClassName() for i in range(no_inst)]
for data in dataset:
for inst in instances:
inst.dosomething(data)
注意:实例不修改数据,因此实例之间不需要通信。
例如:
instances = [ClassName() for i in range(no_inst)]
for data in dataset:
for inst in instances:
inst.dosomething(data)
注意:实例不修改数据,因此实例之间不需要通信。
我知道的最简单的方法是使用与使用内置函数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
副作用,但是当涉及到多处理时我放松了我的立场,因为它很容易。
您可以使用该threading
接口创建一个Thread
满足dosomething(data)
. 您可以为每个循环启动多个线程,调用run()
以启动它们。建议然后将它们放入列表中,以便您可以检查它们的状态,直到全部完成。