Я создал небольшую программу для передачи файлов (клиент / сервер) с помощью сокетов. В моей функции отправки я измерил время, необходимое для выполнения некоторых задач, чтобы оценить среднюю скорость передачи.
while (l):
start_time = time.time()
self.__sendData(l)
acc += len(l)
self.__setProgress(acc)
l = f.read(1024)
elapsed_time = time.time() - start_time
print("longitud: " + str(len(l)))
print("total: " + str(elapsed_time))
self.__setSpeed(len(l), elapsed_time)
Здесь вы можете видеть, что у меня есть переменная acc
(umulator) для расчета общего прогресса передачи. Я прочитал следующие 1024
байтов файла и вычислил время, необходимое для выполнения этих операций. Моя функция __setSpeed
просто вычисляет среднюю скорость, используя самые последние 50
мгновенные скорости.
Этот отлично работает в Linux , никаких проблем. Однако, когда я запустил это в Windows, я обнаружил следующий вывод:
Как видите, очень часто time for transfer and file read
равен zero
. Я не могу понять, почему это происходит, потому что:
- Я мог бы себе представить (только предположение), что в Windows файл может быть помещен в буфер, поэтому
readtime
файла становится равным 0. Хорошо.
- Функция
sendData
может быть очень быстрой, так как она очень мала. Хорошо, но на самом деле ноль?
- Кроме того, мы должны добавить некоторые действительно небольшие суммы для выполнения других команд, таких как управляющие структуры, внутри моих функций и т. Д.
Так что в основном у меня два вопроса:
- Почему это происходит? Должен ли я использовать другой метод для его измерения?
- Какой метод будет точным и подходит для использования как в ОС , Windows и Linux?