gpt4 book ai didi

python - 使用 joblib 将结果返回给父进程

转载 作者:行者123 更新时间:2023-12-01 04:00:38 26 4
gpt4 key购买 nike

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

Joblib 的工作方式就像它应该的那样并加快了速度,但我正在努力解决一个问题 - 如何正确返回评估值?我想将 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]

关于python - 使用 joblib 将结果返回给父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36616714/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com