У меня есть zip-файл со многими файлами .dat. В каждом из них я собираюсь применить некоторую функцию, которая выводит два результата, и я хочу сохранить результат этой функции и время, которое занимает три списка. Порядок имеет значение. Вот код, который делает это без параллельных вычислений:
result_1 = []
result_2 = []
runtimes = []
args_function = 'some args' # Always the same
with zipfile.ZipFile(zip_file, "r") as zip_ref:
for name in sorted(zip_ref.namelist()):
data = np.loadtxt(zip_ref.open(name))
start_time = time.time()
a, b = function(data, args_function)
runtimes.append(time.time() - start_time)
result_1.append(a)
result_2.append(b)
Это кажется мне смущающей параллелью, поэтому я сделал:
result_1 = []
result_2 = []
runtimes = []
args_function = 'some args' # Always the same
def compute_paralel(name, zip_ref):
data = np.loadtxt(zip_ref.open(name))
start_time = time.time()
a, b = function(data, args_function)
runtimes.append(time.time() - start_time)
result_1.append(a)
result_2.append(b)
with zipfile.ZipFile(zip_file, "r") as zip_ref:
Parallel(n_jobs=-1)(delayed(compute_paralel)(name, zip_ref) for name in sorted(zip_ref.namelist()))
Но у меня возникает следующая ошибка: pickle.PicklingError: Could not pickle the task to send it to the workers.
. Поэтому я не совсем уверен, что делать ... Есть идеи?