Не замачиваемая Параллельная Joblib - PullRequest
0 голосов
/ 24 мая 2019

У меня есть 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.. Поэтому я не совсем уверен, что делать ... Есть идеи?

...