Я пишу графический интерфейс для выполнения прославленного «дд».
Я мог бы просто выполнить подпроцесс для 'dd', но я подумал, что с таким же успехом мог бы использовать open()
/ read()
/ write()
для python, если бы я мог, так как это позволит мне гораздо легче отображать прогресс.
По запросу эта ссылка здесь у меня есть:
input = open('filename.img', 'rb')
output = open("/dev/sdc", 'wb')
while True:
buffer = input.read(1024)
if buffer:
output.write(buffer)
else:
break
input.close()
output.close()
... однако это ужасно медленно. Или, по крайней мере, намного медленнее, чем dd
. (примерно в 4-5 раз медленнее)
У меня была игра, и я заметил, что изменение количества «буферизованных» байтов сильно повлияло на скорость завершения. Например, повышение его до 2048 года наполовину заняло. Возможно, здесь будет OT для SO, но я полагаю, что флэш-память имеет оптимальное количество байтов для одновременной записи? Кто-нибудь может подсказать, как мне это узнать?
Изображение и карта имеют размер 1 Гб, поэтому я бы очень хотел вернуться к тем ~ 5 минутам, которые были потрачены, если это возможно. Я ценю это, по всей вероятности, я не буду соответствовать.
Вместо проб и ошибок, сможет ли кто-нибудь предложить способ оптимизации приведенного выше кода и обосновать, почему он работает? Особенно какое значение для input.read () например?
Одно ограничение: python 2.4.3 на Linux (centos5) (пожалуйста, не делайте мне больно)