Истекшее время работы? - PullRequest
0 голосов
/ 08 июня 2018

Я собрал код для своей работы.Он работает нормально, но должен работать каждые 4 или 5 секунд.Поэтому, учитывая правило 4-5secs, я добавил приведенный ниже код в свой существующий код.

#my code starts
import time, json, requests
start = time.process_time()

--- def 2 functions and do something with them ---

while True:
   with open('out.txt', 'a') as f:
        print("the result") +
              time.strftime('%Y-%m-%d %H:%M:%S',
                            time.localtime(time.time())), file=f)
  print(time.process_time() - start)
  time.sleep(2)

С помощью этого добавленного кода я определяю переменную с именем start в начале и вычитаю эту переменную изтекущее время в конце с time.process_time() - start.Таким образом я стремлюсь подсчитать, сколько секунд прошло с начала.В результате этого кода здесь:

print(time.process_time() - start)

Я вижу среднее время в окне моего терминала в 1.1 секунды.

Так что после 2 секунд времени ожидания этот код запускается снова, что занимает 1.1 в среднем,завершить и добавить новый результат и текущее время в файл out.txt.

Мой вопрос:

Я ожидаю, что время в конце строки в out.txt на 3.1 секунды большечем предыдущий (время ожидания 2 с плюс время выполнения 1,1), но это дает мне разницу в 10 с между строками, которую я не могу понять.

Почему я получаю разницу в 10 с между двумя результатами и какя могу уменьшить это до 3,1 секунды?

1 Ответ

0 голосов
/ 08 июня 2018

Я не совсем уверен, чего именно вы пытаетесь достичь, но я почти уверен, process_time - это не та функция, которую вы хотите использовать для этого.Эта функция возвращает:

… значение (в долях секунды) суммы системного и пользовательского процессорного времени текущего процесса.Оно не включает время, прошедшее во время сна.

Таким образом, если вы будете работать 1,1 секунды и спать в течение 2 секунд, вы вернетесь к 1,1, а не к 3,1, как вы видите. 1 Если вы хотите использовать время на часах, а не на процессоре, не используйте эту функцию.

Что следует использовать?Это зависит от того, что вы пытаетесь сделать.Если вы хотите сравнить код, используйте timeit.Для профилирования используйте profile.Для обработки времени общего назначения обычно требуется datetime.Если вам нужен планировщик заданий в процессе, у PyPI есть миллионы вариантов с различными преимуществами и недостатками.Модуль time содержит большинство низкоуровневых компонентов, которые вам понадобятся для создания этих других модулей, и функции, которые имитируют C API, если вы знакомы с работой с struct tm и т.п.,но в остальном это обычно не должно быть первое место, куда вы смотритеНо если вы действительно хотите использовать time здесь, я подозреваю, что здесь будет time или monotonic, а не process_time.


1.Я не знаю, почему у вас есть 10 секунд.Но в опубликованном коде вы фактически не повторяете медленную работу каждый раз через цикл while True:, вы просто записываете строку в файл и снова спите 2 секунды.Поэтому я предполагаю, что ваш реальный код значительно отличается, и то, что мы ищем, является частью этих различий.

...