За последние 24 часа нас посетили 18315 программистов и 1581 робот. Сейчас ищут 1093 программиста ...

[решение] Оценка оставшегося времени

Тема в разделе "Решения, алгоритмы", создана пользователем [vs], 26 янв 2018.

  1. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.557
    Симпатии:
    631
    Полезно при выполнении скрипта в консоли, для оценки оставшегося времени выполнения цикла.
    Например, вы скачиваете файлы более-менее одинакового размера, или череду вызовов какого-нибудь удалённого API. Итоговое количество файлов или вызовов должно быть известно.
    Тогда вы передаете в эту функцию итоговое число итераций и номер текущей итерации, в ответ - примерное число оставшихся секунд.
    PHP:
    1. /**
    2.  * @author Vasilii B. Shpilchin
    3.  * @staticvar array $stamps Timestamps
    4.  * @param int $total Number of items
    5.  * @param int $current Current item number
    6.  * @param int $span Number of timestamps for calculating
    7.  * @return int Number of estimate seconds
    8.  */
    9. function estimateTime ($total, $current, $span = 10) {
    10.   static $stamps = [];
    11.   $now = microtime(1);
    12.   $stamps[] = $now;
    13.   if (count($stamps) < $span + 1) {
    14.     return '...';
    15.   }
    16.   $first = array_shift($stamps);
    17.   $stamps = array_values($stamps);
    18.   return ceil(($total - $current) * (($now - $first) / ($span + 1)));
    19. }
    тест
    PHP:
    1. for ($i = 0; $i < 15; $i++) {
    2.     echo estimateTime(15, $i, 3), "<br>\r\n";
    3.     usleep(mt_rand(100000, 1500000));
    4. }
    Код (Text):
    1. ...
    2. ...
    3. ...
    4. 9
    5. 7
    6. 6
    7. 6
    8. 5
    9. 5
    10. 3
    11. 3
    12. 3
    13. 3
    14. 2
    15. 1
     
    LeoPro и denis01 нравится это.
  2. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @[vs] эммм а если я во на середине запущу торрент? в результате результат будет не верен. полагаю что скорость нужно высчитывать почаще...
     
    denis01 нравится это.
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.557
    Симпатии:
    631
    @abrdabr если включешь торрент, то предполагаемое время вырастет, потому что скорость рассчитывается по последним нескольким итерациями (аргумент $span). Это предусмотрено.
     
    #3 [vs], 26 янв 2018
    Последнее редактирование: 26 янв 2018
    denis01 нравится это.