在多重返回功能上实现多重处理

时间:2019-06-06 14:40:13

标签: python-3.x

我对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)

有人有什么建议吗?

1 个答案:

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