Эффективная инициализация многопроцессорного пула - PullRequest
0 голосов
/ 15 февраля 2020

Моя программа работает с двумя объектами:

1) Путь к файлу с записями в следующем формате: имя файла - контрольная сумма

2) Путь к каталогу, в котором находятся эти файлы сохранен.

Программа предназначена для вычисления контрольной суммы для каждого файла в указанном каталоге, чтобы определить, является ли каждая контрольная сумма правильной.

Я придумала это решение (код упрощен) :

import multiprocessing
import os

def get_checksum(fname):
    # code that returns the checksum

def verify_checksum(dir_path, filenames):
    for fname in filenames.keys():
        # if file is present in the specified directory
        current_file_path = os.path.join(dir_path, fname)
        if os.path.isfile(current_file_path):
            if get_checksum(current_file_path) == filenames[fname]:
                print("Checksum is correct")
            else:
                print("Checksum is incorrect")


filenames = []
counter = 0
# create a dictionary[filename] = checksum 
with open(filepath, 'r') as file:
    for line in file:
        fname, checksum = line.split()
        filenames[fname] = checksum
        counter += 1

with multiprocessing.Pool(processes=counter) as pool:
    for fname in filenames.keys():
        pool.apply_async(verify_checksum, (dir_path, fname, ))

Я перебрал файл с парами имя-файла-контрольной суммы, чтобы создать словарь и подсчитать элементы, чтобы использовать счетчик для выделения пула. Не могли бы вы предложить более эффективное решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...