Прости меня за мое невежество. У меня есть очень большой список данных, которые я хочу обработать. Мой скрипт работает, но очень медленно, поэтому я хочу переключиться на многопроцессорность. В общей сложности мой сценарий должен работать в течение ~ 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))
К сожалению, когда я останавливаю скрипт после некоторого запуска, всписок параллельных данных. Кажется, работает только тогда, когда весь список прошел. Кто может помочь мне здесь ??
print(parallel_data)
[]