Я пытаюсь разбить файл на более мелкие куски +/- 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()
Итак, есть ли способ ускорить процесс?
Вы читаете кусок, сохраняете его во временном файле, затем читаете временный файл и вычисляете его md5. Однако это лишнее - вы можете вычислить md5, пока блок все еще находится в памяти. Это означает, что вам не придется открывать временный файл и читать его, что должно быть быстрее.
Также я бы рекомендовал меньший размер блока - возможно, 2 ^ 11 или 2 ^ 12.
split(1)
?