使用joblib将结果返回到父进程

时间:2016-04-14 07:43:06

标签: python multiprocessing shared-memory joblib

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

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

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

1 个答案:

答案 0 :(得分:2)

如果您确实需要joblib,可以将结果放在<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form action="./index.php" method="post" accept-charset="utf-8"> <input type="hidden" name="foo" value="bar"> <input type="submit" name="foo[bar]" value="Senden"> </form>中,并在结尾处检索结果。 from multiprocessing documentation:

Queue

你也可以使用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() ,它就是这样:(from multiprocessing documentation

multiprocessing.Pool

将打印到标准输出:

  

[1,4,9]