Одна возможность для компактной метки времени для целей воспроизведения ...: установите время в виде числа с плавающей запятой, начиная с эпохи, с помощью time.time () , умножьте на 50, так как вы сказали, что 'повторяя это 50 раз в секунду (результирующая единица, одна пятидесятая секунды, иногда называется «jiffy»), усекается до int
, вычитается из аналогичного числа int
jiffies, начиная с эпохи, которую вы измерили вначало вашей программы и struct.pack
результат в виде беззнакового целого числа с количеством байтов, которое вам нужно для представления предполагаемой длительности - например, с 2 байтами для этой отметки времени вы можете представить прогоны около 1200 секунд (20минут), но если вы планируете более длительные запуски, вам потребуется 4 байта (3 байта - это слишком громоздко, ИМХО; -).
Не во всех операционных системах time.time()
возвращает приличную точность, поэтому вам может потребоваться больше«Подлый» означает, что вам нужно работать на таких, к сожалению, ограниченных ОС.(Это ОЧЕНЬ зависит от ОС, конечно).Какие ОС вам нужно поддерживать ...?
В любом случае ...: для еще большей компактности используйте немного больший множитель, чем 50 (скажем, 10000), для большей точности и сохраняйте, каждый раз, разницуотносительно предыдущей отметки времени - поскольку эта разница не должна сильно отличаться от краткости (если я правильно понимаю вашу спецификацию), которая должна составлять около 200 или около того этих «десятых тысяч секунд», и вы можете хранить один неподписанный байт(и не имеют ограничений по продолжительности прогонов, которые вы сохраняете для будущего воспроизведения).Конечно, это еще больше зависит от точных результатов от time.time ().
Если ваши 556-байтовые двоичные данные имеют высокую степень сжатия, вам стоит использовать gzip для храненияпоток меток времени-данных в сжатом виде;это лучше всего оценить эмпирически на основе ваших фактических данных.