Return 使用 joblib 将结果发送给父进程

Return results to parent process using joblib

我是运行一个函数,需要一段时间才能计算16次。然而,所有这些运行都是相互独立的。因此我决定使用 joblib 来加速它。

Joblib 正常工作并加快了速度,但我正在努力解决一个问题 - 如何正确 return 评估值?我想将 16 个结果保存到内存中,最好是保存到列表中。但是,使用全局变量似乎不是一个选项,因为新的 Python 进程不使用父进程使用的全局变量。根据 joblib 文档,Parallel 的 max_nbytes 参数设置了要共享的数组大小的阈值,但我对子进程函数中的 16 个整数列表所做的所有更改对父进程中的列表没有影响。

唯一的选择是将计算值保存到文件中,然后使用父进程检索它们,还是有其他选择?

如果您确实需要 joblib,可以将结果放入 Queue 并在最后检索结果。 from multiprocessing documentation:

from multiprocessing import Process, Queue

def f(q):
    q.put([42, None, 'hello'])

if __name__ == '__main__':
    q = Queue()
    p = Process(target=f, args=(q,))
    p.start()
    print q.get()    # prints "[42, None, 'hello']"
    p.join()

您也可以使用 multiprocessing.Pool,它的作用就是:(from multiprocessing documentation)

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    p = Pool(5)
    print(p.map(f, [1, 2, 3]))

将打印到标准输出:

[1, 4, 9]