Как вычислить несколько хешей одновременно?Python

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Как вычислить несколько хешей одновременно?

Сообщение Гость »

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

Насколько я вижу, чтение файла с SSD происходит относительно быстро, но хэш-вычисление происходит почти в 4 раза медленнее. Если я хочу вычислить два разных хеша (md5 и sha), это будет в 8 раз медленнее. Я хотел бы иметь возможность параллельно вычислять разные хеши на разных ядрах процессора (до 4, в зависимости от настроек), но не понимаю, как обойти GIL.

Вот мой текущий код ():

Код: Выделить всё

import hashlib
from io import DEFAULT_BUFFER_SIZE

file = 'test/file.mov' #50MG file

def hash_md5(file):
md5 = hashlib.md5()
with open(file, mode='rb') as fl:
chunk = fl.read(DEFAULT_BUFFER_SIZE)
while chunk:
md5.update(chunk)
chunk = fl.read(DEFAULT_BUFFER_SIZE)
return md5.hexdigest()

def hash_sha(file):
sha = hashlib.sha1()
with open(file, mode='rb') as fl:
chunk = fl.read(DEFAULT_BUFFER_SIZE)
while chunk:
sha.update(chunk)
chunk = fl.read(DEFAULT_BUFFER_SIZE)
return sha.hexdigest()

def hash_md5_sha(file):
md5 = hashlib.md5()
sha = hashlib.sha1()
with open(file, mode='rb') as fl:
chunk = fl.read(DEFAULT_BUFFER_SIZE)
while chunk:
md5.update(chunk)
sha.update(chunk)
chunk = fl.read(DEFAULT_BUFFER_SIZE)
return md5.hexdigest(), sha.hexdigest()

def read_file(file):
with open(file, mode='rb') as fl:
chunk = fl.read(DEFAULT_BUFFER_SIZE)
while chunk:
chunk = fl.read(DEFAULT_BUFFER_SIZE)
return
Я провел несколько тестов и вот результаты:

Код: Выделить всё

from hash import *
from timeit import timeit
timeit(stmt='read_file(file)',globals=globals(),number = 100)
1.6323043460000122
>>> timeit(stmt='hash_md5(file)',globals=globals(),number = 100)
8.137973076999998
>>> timeit(stmt='hash_sha(file)',globals=globals(),number = 100)
7.1260356809999905
>>> timeit(stmt='hash_md5_sha(file)',globals=globals(),number = 100)
13.740918666999988
Этот результат должен быть функцией, основной скрипт будет перебирать список файлов и проверять разные хеши для разных файлов (от 1 до 4).
Есть идеи, как этого добиться?

Подробнее здесь: https://stackoverflow.com/questions/610 ... -same-time
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как вычислить несколько хешей одновременно?
    Гость » » в форуме Python
    0 Ответы
    28 Просмотры
    Последнее сообщение Гость
  • Хеширование пароля с солью и получение разных хешей и разных солей в любое время.
    Гость » » в форуме Python
    0 Ответы
    44 Просмотры
    Последнее сообщение Гость
  • Сравнение больших текстовых файлов. Сравнение хешей происходит быстрее, чем использование подмножеств файла?
    Anonymous » » в форуме C#
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Rclone Python при вычислении хешей: ValueError
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Rclone Python при вычислении хешей: ValueError
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»