【发布时间】:2021-10-31 23:14:29
【问题描述】:
我想用不同的参数来取乐function。对于每个不同的参数,我想并行运行该函数,然后获取每次运行的输出。 multiprocessing 模块似乎可以在这里提供帮助。我不确定完成这项工作的正确步骤。
我是否启动所有进程,然后
get所有队列,然后按此顺序加入所有进程?还是我get加入后的结果?还是加入第i个进程后得到第i个结果?
from numpy.random import uniform
from multiprocessing import Process, Queue
def function(x):
return uniform(0.0, x)
if __name__ == "__main__":
queue = Queue()
processes = []
x_values = [1.0, 10.0, 100.0]
# Start all processes
for x in x_values:
process = Process(target=function, args=(x, queue, ))
processes.append(process)
process.start()
# Grab results of the processes?
outputs = [queue.get() for _ in range(len(x_values))]
# Not even sure what this does but apparently it's needed
for process in processes:
process.join()
【问题讨论】:
-
您能解释一下这些流程在做什么吗?我是他们向你返回了一些价值,还是他们参与了其他事情?个人 id 使用多处理池。另请注意,如果您产生的进程多于您拥有的核心......它实际上并没有做任何事情。对我来说,池比手动启动流程更直观一点,特别是如果您的案例中有很多 x_values。
-
@JasonChia 感谢您的评论。基本上你可以把我想运行的函数想象成一个实验。我想并行运行实验 100 次并存储输出(在我的实际用例中是字典)。我这样做的原因是我想看看我的实验平均表现如何,但每次实验运行大约需要 1 小时,所以我想并行化它。
-
@JasonChia 有意义吗?您将如何使用池?如果你能告诉我,你会是我的英雄!
标签: python python-3.x parallel-processing multiprocessing