Быстрое соединение файлов в Python и получение их md5 - PullRequest
1 голос
/ 04 мая 2011

Я пытаюсь разбить файл на более мелкие куски +/- 300 килобайт на кусочек. Это довольно медленно для файла размером 300 мегабайт (+/- 1000 штук)

Я пока не использую потоки, я не уверен, что это заставит его работать быстрее

    cs = 1
    pieces = 1000

    # Open the file
    f = open(self.file, 'rb')
    result = {}

    while cs <= pieces:

        #Filename
        filename = str(cs).zfill(5) + '.split'

        # Generate temporary filename
        tfile = filename

        # Open the temporary file
        w = open(tfile, 'wb')

        # Read the first split
        tdata = f.read(maxsize)

        # Write the data
        w.write(tdata)

        # Close the file
        w.close()

        # Get the hash of this chunk
        result[filename] = self.__md5(tfile)

        cs += 1

Это функция md5:

def __md5(self, f, block_size=2**20):

    f = open(f, 'rb')

    md5 = hashlib.md5()
    while True:
        data = f.read(block_size)
        if not data:
            break
        md5.update(data)
    return md5.hexdigest()

Так есть ли способ ускорить процесс?

1 Ответ

4 голосов
/ 04 мая 2011

Вы читаете кусок, сохраняете его во временный файл, затем читаете временный файл и вычисляете его md5. Однако в этом нет необходимости - вы можете вычислить md5, пока блок все еще находится в памяти. Это означает, что вам не нужно открывать временный файл и читать его, что должно быть быстрее.

Также я бы порекомендовал меньший размер блока - возможно, 2 ^ 11 или 2 ^ 12.

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