我有一个并行化的函数,我想在其中附加一个列表。我首先在函数外部初始化空列表,然后在函数内部初始化,我在每次迭代时都向其附加值。我正在使用joblib来并行化函数,因此附加顺序不必是顺序的(取决于生产者何时将下一个可用资源提供给joblib,这无关紧要)。下面的代码可以工作,但是会使用当前的i值重新创建一个新的附加列表,它无法记住以前附加的值,从而无法继续附加到先前附加的值:
from joblib import Parallel, delayed
list_a = []
def append_many(i):
list_a.append(i)
print(list_a)
num_of_iterations = 10
def producer():
for i in range(num_of_iterations):
yield i
out = Parallel(n_jobs=4, verbose=1, pre_dispatch='2*n_jobs', batch_size='auto')(delayed(append_many)(i) for i in producer())
print(list_a)
上面的代码给出以下结果:
[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
如果在生成器生成最终迭代值之后打印list_a,则得到[],它正在检索已初始化的空列表的值。
我要实现的目标如下:
num_of_iterations = 10
list_a = []
for i in range(num_of_iterations):
list_a.append(i)
print(list_a)
print(list_a)
给出以下结果:
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
我现在还可以通过打印出以下内容来访问循环外的最终附加值:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
如何使用上面的joblib示例获得相同的结果?