运行 相同参数的相同函数10次并得到结果
Run the same function with the same arguments 10 times and get results
我正在寻找最聪明的方法 运行 10 次使用相同参数的相同函数并存储结果。
直接的解决方案是:
def f(a):
// do stuff
return a
results = []
same_argument = 10
for x in range(0,10):
results.append(f(same_argument))
这行得通,但我相信如果 10 个进程可以 运行 同时进行,该进程将花费更少的时间。
The multi-process map
function 似乎可以完成这项工作,但它只需要一个可迭代的参数。我可以将相同参数的 10 倍的列表传递给它,但感觉不对。
是否有任何其他内置方法可以解决我的问题?
我只是使用 pool
并多次传递相同的参数...
n_times = 10
results = pool.map(f, [same_argument] * n_times)
速度很快,而且很容易判断发生了什么。唯一的缺点是它需要一点中间存储——与保存实际结果所需的存储量相比,这可能可以忽略不计。
当然,如果你真的担心存储开销,你应该可以使用 itertools.repeat(same_argument, n_times)
...
列表理解呢?
results = [f(same_argument) for _ in xrange(10)]
其中“_”用于使语法验证工具(如 pylint)不会抱怨未使用的变量。
我正在寻找最聪明的方法 运行 10 次使用相同参数的相同函数并存储结果。
直接的解决方案是:
def f(a):
// do stuff
return a
results = []
same_argument = 10
for x in range(0,10):
results.append(f(same_argument))
这行得通,但我相信如果 10 个进程可以 运行 同时进行,该进程将花费更少的时间。
The multi-process map
function 似乎可以完成这项工作,但它只需要一个可迭代的参数。我可以将相同参数的 10 倍的列表传递给它,但感觉不对。
是否有任何其他内置方法可以解决我的问题?
我只是使用 pool
并多次传递相同的参数...
n_times = 10
results = pool.map(f, [same_argument] * n_times)
速度很快,而且很容易判断发生了什么。唯一的缺点是它需要一点中间存储——与保存实际结果所需的存储量相比,这可能可以忽略不计。
当然,如果你真的担心存储开销,你应该可以使用 itertools.repeat(same_argument, n_times)
...
列表理解呢?
results = [f(same_argument) for _ in xrange(10)]
其中“_”用于使语法验证工具(如 pylint)不会抱怨未使用的变量。