如何并行重复运行一个函数?
例如,我有一个不带参数且具有随机元素的函数。我想多次运行它,如下图所示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())
这是重复的并行 python-just-run-function-n-times https://stackoverflow.com/questions/26399283/parallel-python-just-run-function-n-times但是,答案不太合适,因为它将不同的输入传递给函数,并且如何并行化一个简单的 Python 循环? https://stackoverflow.com/questions/9786102/how-do-i-parallelize-a-simple-python-loop还给出了将不同参数传递到函数而不是重复相同调用的示例。
我使用的是 Windows 10 并使用 Jupyter
就我的实际使用而言:
每次调用会产生大量输出吗?
循环的每次迭代都会产生一个数字。
需要保留输出吗?每次调用大约需要多长时间?
是的,我需要保留这些数字,每次迭代大约需要 30 分钟。
?总共需要运行多少次?
至少100个。
您想在多台机器上并行还是仅在多个内核上并行?
目前仅跨多个核心。
如果您不想将任何输入传递给函数,只需使用 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))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)