如何在Joblib的并行for循环中附加列表

时间:2019-10-07 20:51:06

标签: python for-loop parallel-processing append joblib

原谅我的无知。我有很多要处理的数据列表。我的脚本可以正常运行,但是速度很慢,因此我想切换到多处理。总的来说,我的脚本必须运行大约30天,但是我想加快这个过程。我的原始脚本已经过优化,因此可以在循环过程中追加列表。这非常有用,因为它允许我在需要时关闭计算机。我将给出一个随机的工作示例来重现该问题。请注意以下代码,因为这可能会降低计算机的速度。这个想法是在运行时在某处停止以下代码。

from joblib import Parallel, delayed
import multiprocessing
from tqdm import tqdm
num_cores = multiprocessing.cpu_count()

Crazy_long_list=list(range(0,10000000,1))

def get_data(i):
    return ((i * 2),(i/2))

normal_output=[]
# Without parallel processing
for i in Crazy_long_list:
    normal_output.append(get_data(i))

在任何时候停止该脚本时,附加列表都会保留。因此,我可以将所需的输出保存到.csv,然后在第二天将其加载,然后从结束处进一步运行脚本。您可以通过运行部分代码并在随机时刻停止它来进行测试。数据应保存。

print(normal_output[0:10])

[(0, 0.0),
 (2, 0.5),
 (4, 1.0),
 (6, 1.5),
 (8, 2.0),
 (10, 2.5),
 (12, 3.0),
 (14, 3.5),
 (16, 4.0),
 (18, 4.5)]

我并行执行此操作的方法如下所示:

parallel_data=[]
parallel_data=Parallel(n_jobs=num_cores, verbose=50)(delayed(get_data)(i)for i in tqdm(Crazy_long_list))

不幸的是,当我运行一段时间后停止脚本时,parallel_data列表中没有数据。似乎只有整个列表都通过后,它才起作用。谁可以在这里帮助我?

print(parallel_data)
[]

0 个答案:

没有答案
相关问题