1

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

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

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

4

1 回答 1

2

如果您真的需要 joblib,您可以将结果放入 aQueue并在最后检索您的结果。 来自多处理文档:

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 import Pool

def f(x):
    return x*x

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

将打印到标准输出:

[1, 4, 9]

于 2016-04-14T07:53:33.153 回答