我对python相当陌生(并且堆栈溢出!),而且我从未使用过Multiprocessing。我目前有一个返回两个值的函数。这些值将附加到不同的列表。该函数具有多个必需的参数,其中一个来自for循环,请参见下面的示例代码。
该代码有效,但是功能缓慢。我想为此任务实现MultiProcessing,但是由于我得到多个返回值,因此我似乎无法使其在池中正常工作。
for x in list1:
(a, b) = function(x, y, z)
if a is not None:
list2.append(a)
if b is not None:
list3.append(b)
有人有什么建议吗?
答案 0 :(得分:0)
这看起来像一个embarrassingly parallel问题,可以通过类似的方法解决:
import multiprocessing
n_proc = multiprocessing.cpu_count() + 1
pool = multiprocessing.Pool(processes=n_proc)
proc_results = [
pool.apply_async(func, func_args, func_kwargs)
for func, func_args, func_kwargs in
zip(funcs, funcs_args, funcs_kwargs)]
results = [
proc_result.get() for proc_result in proc_results]
或基于multiprocessing
的{{1}}或map()
的方法。
在您的情况下,代码:
starmap()
将成为:
for x in list1:
a, b = function(x, y, z)
if a is not None:
list2.append(a)
if b is not None:
list3.append(b)