我正在运行一个函数,需要一段时间才能被评估16次。然而,所有这些运行是相互独立的。因此,我决定使用joblib来加快速度。
J强有力的工作就像它应该做的那样,并且加快了它的速度,但是我正在努力解决一个问题--如何正确地返回评估的值?我想将16个结果保存到内存中,最好是保存到列表中。但是,使用全局变量似乎不是一个选项,因为新的Python进程不使用父进程所使用的全局变量。根据joblib文档,并行的max_nbytes参数为数组大小设置了一个阈值来共享,但是我对子进程函数中的16个整数列表所做的所有更改都对父进程中的列表没有任何影响。
唯一的选项是将计算出来的值保存到文件中,然后使用父进程检索它们,还是有其他选择?
发布于 2016-04-13 23:53:33
如果您确实需要joblib,可以将结果放入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()
您也可以使用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
https://stackoverflow.com/questions/36616714
复制相似问题