- Запомните время, когда началась передача;
- При каждом обновлении подсчитайте, сколько времени уже происходит передача;
- На основании этого рассчитайте скорость передачи;
- Исходя из этого, подсчитайте, сколько времени займет передача остальных.
import datetime
# ...
start = datetime.datetime.now()
def upload_status(self, sent, size):
sent_mb = round(float(sent) / 1000000, 1)
remaining_mb = round(float(size - sent) / 1000000, 1)
size_mb = round(size / 1000000, 1)
time = datetime.datetime.now()
elapsed = time - start
if sent > 0:
remaining_seconds = elapsed.total_seconds() * (float(size - sent) / sent)
else:
remaining_seconds = 0
remaining_hours, remaining_remainder = divmod(remaining_seconds, 3600)
remaining_minutes, remaining_seconds = divmod(remaining_remainder, 60)
print(
("Total size:{0} MB|Sent:{1} MB|Remaining:{2} MB|" +
"Time remaining:{3:02}:{4:02}:{5:02}").
format(
size_mb, sent_mb, remaining_mb,
int(remaining_hours), int(remaining_minutes), int(remaining_seconds)))
Также обратите внимание, что ваш расчет MB работает только в Python 3.В Python 2 вы будете чередовать все цифры.Я исправил это путем приведения к float
.