По мере роста выходного файла скорость записи падает. Как ускорить запись файла?Python

Программы на Python
Ответить
Anonymous
 По мере роста выходного файла скорость записи падает. Как ускорить запись файла?

Сообщение Anonymous »

У меня есть код:

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

saveData = {
"xyStep": xyStep,
"xRange": xRange,
"yRange": yRange,
"zRange": zRange,
"zBase": zBase,
"data": [[0] * ceil(xRange/xyStep) for i in range(ceil(yRange/xyStep))],
}

measurements = 1
pos = microscope.position
print("Current position: " + json.dumps(pos))

starting_pos = microscope.position

ix = 0
iy = 0

totalElapsed = 0
stepsTaken = 1
maxSteps = (xRange/xyStep) * (yRange/xyStep)
up = True

ix = 0
for x in range(-micronToStep(xRange/2), micronToStep(xRange/2) - micronToStep(xyStep), micronToStep(xyStep)):
iy = 0
for y in range(-micronToStep(yRange/2), micronToStep(yRange/2) - micronToStep(xyStep), micronToStep(xyStep)):
start = timer()
values = []
if (up):
pos = {}
pos['x'] = x # declination
pos['y'] = y # declination
pos['z'] = zBase - micronToStep(zRange/2)
pos['z2'] = zBase + micronToStep(zRange/2)
print("Scanning up to position:", pos)

values = microscope.measureZ(microscope, pos)
values = np.asarray(values)
thisTime =  timer() - start
totalElapsed += thisTime
up = False
else:
pos = {}
pos['x'] = x # declination
pos['y'] = y # declination
pos['z'] = zBase + micronToStep(zRange/2)
pos['z2'] = zBase - micronToStep(zRange/2)
print("Scanning to position:", pos)

values = microscope.measureZ(microscope, pos)
values = np.asarray(values)
values = np.flip(values)
thisTime =  timer() - start
totalElapsed += thisTime
up = True

print(pos)
saveData['data'][ix][iy] = values

iy += 1
timeLeft = (maxSteps - stepsTaken) * (totalElapsed / stepsTaken) / 60 / 60
print(">>>>>>>>>>>> Estimated time left: [" + str(timeLeft) + "hr], Per Scan: [" + str(totalElapsed / stepsTaken) + "s][" + str(thisTime) + "], Total Elapsed: [" + str(totalElapsed) + "s], Scans taken: [" + str(stepsTaken) + "] out of: [" + str(maxSteps) + "]")
stepsTaken += 1
pickle.dump(saveData, open('saveData.bin', 'wb'))

ix += 1

pickle.dump(saveData, open('saveData.bin', 'wb'))
Во время выполнения выходной файл достигает около 4 ГБ, по мере роста файла скорость записи падает.
Я использую в другом приложении файл saveData.bin, поэтому мне хотелось сохранить ту же внутреннюю структуру данных в файле.
Изменить:
Я читал о многих вариантах, и мне интересно, является ли np.memmap оптимальным решением моей проблемы. Буду очень признателен за показ правильной реализации решения. Проблема в том, что для np.memmap требуются все диапазоны, но один из моих диапазонов зависит от «данных», как вы могли видеть в приведенном выше коде.
Как ускорить запись файла?

Подробнее здесь: https://stackoverflow.com/questions/798 ... riting-the
Ответить

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

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

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

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

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