是否有一种简单的方法可以使用多处理来做到这一点?Python多处理 - 将类方法应用于对象列表
for sim in sim_list:
sim.run()
其中sim_list的元素是“模拟”对象和运行()是模拟类不修改对象的属性的方法。例如:
class simulation:
__init__(self):
self.state['done']=False
self.cmd="program"
def run(self):
subprocess.call(self.cmd)
self.state['done']=True
sim_list中的所有sim都是独立的,所以策略不必是线程安全的。
我尝试了以下内容,这显然有缺陷,因为参数是通过深层复制传递的,并且未就地进行修改。
from multiprocessing import Process
for sim in sim_list:
b = Process(target=simulation.run, args=[sim])
b.start()
b.join()
你不想在循环中加入()你的进程,或者你将一个接一个地运行它们,而不是并行运行它们。要回答您的问题,您可以在启动进程时发送multiprocessing.Queue对象,然后在完成时将自己放入队列中。 –
好的关于join()的评论。关于Queue的使用,我不确定这应该如何工作。无论如何,我的SIM卡对象是否会通过深层复制传递? – calys
@calys在windows上,你会得到一个'PicklingError',因为你试图腌制一个方法,在UNIX上没有“deepcopy”,简单地说每个进程都获得整个地址空间的完美副本。您必须通过某些明确的进程间通信来替换实例中的状态更改。 – Bakuriu