原谅我的无知。我有很多要处理的数据列表。我的脚本可以正常运行,但是速度很慢,因此我想切换到多处理。总的来说,我的脚本必须运行大约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)
[]