gpt4 book ai didi

python - 重复并行运行一个函数

转载 作者:太空宇宙 更新时间:2023-11-03 23:56:26 25 4
gpt4 key购买 nike

如何并行重复运行一个函数?

例如,我有一个不带参数且具有随机元素的函数。我想多次运行它,如下所示使用 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


关于我的实际用途:

Does it produce a large volume of output per call?
Each iteration of the loop produces one number.

Do you need to keep the output? How long does each invocation take roughly?
Yes, I need to retain the numbers and it takes ~30 minutes per iteration.

?How many times do you need to run it in total?
At least 100.

Do you want to parallelize across multiple machines or just multiple cores?
Currently just across multiple cores.

最佳答案

如果您不想将任何输入传递给您的函数,只需使用 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 绑定(bind),那么我建议您使用 ThreadPool (多线程)而不是 Pool (多处理)

创建线程池的代码:

from multiprocessing.pool import ThreadPool

threads = 5
t = ThreadPool(threads)
t.map(f, range(10))

关于python - 重复并行运行一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57581445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com