如何并行重复运行函数?
例如,我有一个不带参数且具有随机元素的函数。我想多次运行它,下面使用for
循环进行了说明。请问我该如何同时完成?
import numpy as np
def f():
x = np.random.uniform()
return x*x
np.random.seed(1)
a = []
for i in range(10):
a.append(f())
这是parallel-python-just-run-function-n-times的副本,但是,由于将不同的输入传递给函数,答案并不完全合适,How do I parallelize a simple Python loop?还给出了将不同的参数传递给函数而不是传递给函数的示例。重复相同的通话。
我在Windows 10上并且正在使用Jupyter
在我真正使用的方面:
每次通话是否会产生大量输出?
循环的每次迭代都会产生一个数字。是否需要保留输出?每次调用大约需要多长时间?
是的,我需要保留数字,每次迭代大约需要30分钟。?您总共需要运行几次?
至少100。您要在多台计算机或多个内核之间并行化吗?
目前仅跨多个内核。
答案 0 :(得分:3)
如果您不想将任何输入传递给函数,只需使用Throwaway变量_
作为函数的参数,并对其进行并行化,如下面的代码所示。
import numpy as np
from multiprocessing.pool import Pool
def f(_):
x = np.random.uniform()
return x*x
if __name__ == "__main__":
processes = 5 # Specify number of processes here
p = Pool(processes)
p.map(f, range(10))
更新:
要回答更新的问题,如果您的任务不是很繁重,并且仅受I / O约束,那么我建议您使用ThreadPool
(多线程)而不是Pool
(多处理)
创建Threadpool
的代码:
from multiprocessing.pool import ThreadPool
threads = 5
t = ThreadPool(threads)
t.map(f, range(10))