重复并行运行一个函数

时间:2019-08-20 20:58:27

标签: python parallel-processing

如何并行重复运行函数?

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

     

您要在多台计算机或多个内核之间并行化吗?
    目前仅跨多个内核。

1 个答案:

答案 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))