Як отримати час виконання програми Python?


975

У мене в Python є програма командного рядка, яка потребує певного часу. Я хочу знати точний час, який потрібен, щоб закінчити біг.

Я переглянув timeitмодуль, але, здається, це лише для невеликих фрагментів коду. Я хочу вчасно провести всю програму.

Відповіді:


1719

Найпростіший спосіб в Python:

import time
start_time = time.time()
main()
print("--- %s seconds ---" % (time.time() - start_time))

Це передбачає, що ваша програма займає щонайменше десяту частину секунди.

Друкує:

--- 0.764891862869 seconds ---

58
це обчислює реальний час, хоча (включаючи час, який використовують інші програми), тому, здається, буде потрібно більше часу, коли ваш комп'ютер зайнятий іншими справами
newacct

35
У Windows зробіть те ж саме, але використовуйте time.clock () замість time.time (). Ви отримаєте трохи кращу точність.
Корі Голдберг

33
Я рекомендую робити round(time.time() - start_time, 2)(або що завгодно десятковий), я отримував наукові числа, наприклад, 1,24е-5.
ThorSummoner

16
@ThorSummoner: ви, мабуть, хочете '%.2f'замість round()цього.
jfs

10
У цього методу є велика вада. Якщо системний час змінюється під час роботи програми (наприклад, синхронізація з сервером часу), цей метод не працює або може навіть порушити код (негативна тривалість ...)
Gilad

210

Я розміщую цей timing.pyмодуль у власному site-packagesкаталозі та просто вставляю import timingвгорі мого модуля:

import atexit
from time import clock

def secondsToStr(t):
    return "%d:%02d:%02d.%03d" % \
        reduce(lambda ll,b : divmod(ll[0],b) + ll[1:],
            [(t*1000,),1000,60,60])

line = "="*40
def log(s, elapsed=None):
    print line
    print secondsToStr(clock()), '-', s
    if elapsed:
        print "Elapsed time:", elapsed
    print line
    print

def endlog():
    end = clock()
    elapsed = end-start
    log("End Program", secondsToStr(elapsed))

def now():
    return secondsToStr(clock())

start = clock()
atexit.register(endlog)
log("Start Program")

Я також можу зателефонувати timing.logв рамках своєї програми, якщо є значні етапи в рамках програми, яку я хочу показати. Але тільки в тому числі import timingбуде надруковано час початку та закінчення, а також загальний минулий час. (Пробачте за мою незрозумілу secondsToStrфункцію, вона просто формує число з секундами з плаваючою точкою в год: мм: ss.sss.)

Примітка: Версію Python 3 вищевказаного коду можна знайти тут або тут .


8
Це справжнє чисте рішення, яке також працює, якщо натиснути Ctrl-C, щоб зупинити програму.
sorin

відмінне рішення, я обов'язково використаю це і створять декоратор часу для виявлення функцій вузького місця
c24b

9
Для Python 3 додайте from functools import reduceвгорі і поставте дужки навколо кожного оператора друку. Чудово працює!
PowerApp101

2
@ PowerApp101 - Спасибі - у відповіді Нікоджо надається версія модуля, зручна для Py3.
PaulMcG

4
Примітка: time.clock () "Застаріло з версії 3.3: Поведінка цієї функції залежить від платформи: використовуйте perf_counter () [з часом спав] або process_time () [без часу спали] замість цього, залежно від ваших вимог, мати чітко визначену поведінку ".
мак

175

У Linux або Unix:

$ time python yourprogram.py

У Windows див. Це питання StackOverflow: Як вимірювати час виконання команди в командному рядку Windows?

Для більш детального виводу,

$ time -v python yourprogram.py
    Command being timed: "python3 yourprogram.py"
    User time (seconds): 0.08
    System time (seconds): 0.02
    Percent of CPU this job got: 98%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.10
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 9480
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 1114
    Voluntary context switches: 0
    Involuntary context switches: 22
    Swaps: 0
    File system inputs: 0
    File system outputs: 0
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

тож, якщо я запускаю інший віджет, наприклад, у додатку QT, як ми обчислюємо час, який витрачає цей віджет на показ?
Ciasto piekarz

1
У випадку віджетів, якщо ви запускаєте програму Python, використовуйте прийняту відповідь від rogeriopvl.
steveha

але це, здається, не дає часу в хв: секунд, це закінчує плаваюче число !!
Ciasto piekarz

3
Так, це дає кілька секунд. Ви можете конвертувати в хв: секунди, якщо хочете. Подивіться на відповідь Пола Макгуайра та його secondsToStr()функції.
steveha

68

Мені дуже подобається відповідь Пола Макгвайра , але я використовую Python 3. Тому для тих, хто цікавиться: ось модифікація його відповіді, яка працює з Python 3 на * nix (я думаю, під Windows, що clock()слід використовувати замість time()):

#python3
import atexit
from time import time, strftime, localtime
from datetime import timedelta

def secondsToStr(elapsed=None):
    if elapsed is None:
        return strftime("%Y-%m-%d %H:%M:%S", localtime())
    else:
        return str(timedelta(seconds=elapsed))

def log(s, elapsed=None):
    line = "="*40
    print(line)
    print(secondsToStr(), '-', s)
    if elapsed:
        print("Elapsed time:", elapsed)
    print(line)
    print()

def endlog():
    end = time()
    elapsed = end-start
    log("End Program", secondsToStr(elapsed))

start = time()
atexit.register(endlog)
log("Start Program")

Якщо вам це здається корисним, вам слід все-таки проголосувати його відповідь замість цієї, як це робила більша частина роботи;).


1
Я знайшов timedelta(seconds=t).total_seconds()корисну.
nu everest

Чи можете ви пояснити, що ці функції виконують? що в команді журналу? що таке атексит?
SumNeuron

@SumNeuron, коротше кажучи, ці функції роздруковують час виконання програми, з якою ви її використовуєте. s - це перший аргумент для входу в журнал і повинен бути рядком. log - це функція, яка виводить інформацію про час. atexit - модуль python, який дозволяє реєструвати функції, що викликаються на виході з програми.
Nicojo

@Nicojo Дуже корисно. У мене є питання про те, як я можу використовувати цей код для перевірки, наприклад, часу на виконання циклу. припустимо, у мене є функція, що включає цикл, і я хочу отримати час, витрачений цим циклом,
Moudi

@moudi Найвища відповідь на це питання - найкраща ставка. Просто встановіть час початку прямо перед циклом і обчисліть минулий час на виході з циклу.
Nicojo

67
import time

start_time = time.clock()
main()
print time.clock() - start_time, "seconds"

time.clock()повертає час процесора, що дозволяє обчислити лише час, який використовується цим процесом (все одно на Unix). У документації сказано, "у будь-якому випадку це функція, яка використовується для порівняльного алгоритму Python або алгоритмів синхронізації"


14
time.time () найкраще використовувати на * nix. time.clock () найкраще використовувати в Windows.
Корі Голдберг

Я вважаю, що це не може бути використане для обчислення "лише часу, використовуваного цим процесом", оскільки він використовує системний час і буде впливати на інші системні процеси? Виправте мене, якщо я з цього приводу помиляюся :)
AnnanFay

6
Примітка: time.clock () "Застаріло з версії 3.3: Поведінка цієї функції залежить від платформи: використовуйте perf_counter () [з часом спав] або process_time () [без часу спали] замість цього, залежно від ваших вимог, мати чітко визначену поведінку ".
мак

55

Мені подобається висновок, datetimeякий надає модуль, де об’єкти дельти часу показують дні, години, хвилини тощо, як це необхідно для людини.

Наприклад:

from datetime import datetime
start_time = datetime.now()
# do your work here
end_time = datetime.now()
print('Duration: {}'.format(end_time - start_time))

Вихід зразка, наприклад

Duration: 0:00:08.309267

або

Duration: 1 day, 1:51:24.269711

Як зазначав Дж. Ф. Себастьян, такий підхід може зіткнутися з хитрими випадками за місцевим часом, тому безпечніше використовувати:

import time
from datetime import timedelta
start_time = time.monotonic()
end_time = time.monotonic()
print(timedelta(seconds=end_time - start_time))

1
@phansen: ви можете використовувати timedelta(seconds=time.monotonic()-start)тут (або time.time()якщо інтервал великий). Не віднімайте наївні об’єкти дати, які представляють місцевий час; місцевий час не є одноманітним
jfs

Добре, ти маєш на увазі, як start_time = time.monotonic(); end_time = time.monotonic(); timedelta(seconds=end_time - start_time). Я вірю, що ти маєш рацію, але тоді ти також маєш відформатувати, коли повернешся datetime.timedelta(0, 0, 76). Крім того, схоже, монотонний метод був доданий лише в Python 3.
metakermit

А, добре. Я бачу, ви можете передати це, str()щоб зробити його "людиною". Я оновлю відповідь, дякую.
metakermit

53

Ви можете використовувати профайлер cProfile Python для вимірювання часу процесора та додатково, скільки часу витрачається всередині кожної функції та скільки разів викликається кожна функція. Це дуже корисно, якщо ви хочете покращити продуктивність свого сценарію, не знаючи, з чого почати. Ця відповідь на ще одне запитання про переповнення стека досить хороша. Завжди добре ознайомитися і з документацією .

Ось приклад, як профілювати сценарій за допомогою cProfile з командного рядка:

$ python -m cProfile euler048.py

1007 function calls in 0.061 CPU seconds

Ordered by: standard name
ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    1    0.000    0.000    0.061    0.061 <string>:1(<module>)
 1000    0.051    0.000    0.051    0.000 euler048.py:2(<lambda>)
    1    0.005    0.005    0.061    0.061 euler048.py:2(<module>)
    1    0.000    0.000    0.061    0.061 {execfile}
    1    0.002    0.002    0.053    0.053 {map}
    1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler objects}
    1    0.000    0.000    0.000    0.000 {range}
    1    0.003    0.003    0.003    0.003 {sum}

@jacwah Як ви підсумовуєте загальний час?
Чак

@Chuck Перший рядок говорить X function calls in Y CPU seconds. Якщо ви хочете часу настінного годинника, використовуйте тут одну з інших відповідей.
jacwah

28

Ще краще для Linux: time

$ time -v python rhtest2.py

    Command being timed: "python rhtest2.py"
    User time (seconds): 4.13
    System time (seconds): 0.07
    Percent of CPU this job got: 91%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.58
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 0
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 15
    Minor (reclaiming a frame) page faults: 5095
    Voluntary context switches: 27
    Involuntary context switches: 279
    Swaps: 0
    File system inputs: 0
    File system outputs: 0
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

18

time.clock ()

Застаріло з версії 3.3: Поведінка цієї функції залежить від платформи: використовуйте perf_counter () або process_time () замість цього, залежно від ваших вимог, щоб мати чітко визначену поведінку.

time.perf_counter ()

Поверніть значення (у дробових секундах) лічильника продуктивності, тобто годинника з найвищою доступною роздільною здатністю для вимірювання короткої тривалості. Це дійсно включає в себе час , що минув під час сну і є системним.

time.process_time ()

Повертає значення (у дробових секундах) суми системи та часу процесора користувача поточного процесу. Він не включає час, що минув під час сну.

start = time.process_time()
... do something
elapsed = (time.process_time() - start)

1
Можливо, почніть з висновку "Використовувати time.process_time ()" (або подібне)?
Пітер Мортенсен

17

Просто використовуйте timeitмодуль. Він працює як з Python 2, так і з Python 3.

import timeit

start = timeit.default_timer()

# All the program statements
stop = timeit.default_timer()
execution_time = stop - start

print("Program Executed in "+str(execution_time)) # It returns time in seconds

Він повертається за лічені секунди, і ви можете мати час виконання. Це просто, але слід записати їх у головну функцію, яка запускає виконання програми. Якщо ви хочете отримати час виконання, навіть коли ви отримаєте помилку, тоді візьміть до нього свій параметр "Пуск" і обчисліть так:

def sample_function(start,**kwargs):
     try:
         # Your statements
     except:
         # except statements run when your statements raise an exception
         stop = timeit.default_timer()
         execution_time = stop - start
         print("Program executed in " + str(execution_time))

Чи не повинна бути ця частина під finallyчастиною?
альпер

12

Наступні відбитки фрагментів минули час у приємному для людини читаному <HH:MM:SS>форматі.

import time
from datetime import timedelta

start_time = time.time()

#
# Perform lots of computations.
#

elapsed_time_secs = time.time() - start_time

msg = "Execution took: %s secs (Wall clock time)" % timedelta(seconds=round(elapsed_time_secs))

print(msg)    

1
аж донизу тут знаходить найбільш розумну відповідь ("розумний" означає, покладаючись на максимальну кількість вбудованих модулів і, отже, найменш набираючи текст).
ійосеф

8
from time import time
start_time = time()
...
end_time = time()
time_taken = end_time - start_time # time_taken is in seconds
hours, rest = divmod(time_taken,3600)
minutes, seconds = divmod(rest, 60)


8

Я переглянув модуль timeit, але, здається, це лише для невеликих фрагментів коду. Я хочу вчасно провести всю програму.

$ python -mtimeit -n1 -r1 -t -s "from your_module import main" "main()"

Він запускає your_module.main()функцію одноразово і друкує минулий час, використовуючи time.time()функцію таймера.

Для емуляції /usr/bin/timeв Python див. Підпроцес Python з / usr / bin / time: як захопити інформацію про час, але ігнорувати всі інші результати? .

Для вимірювання часу процесора (наприклад, не включайте час протягом time.sleep()) для кожної функції, ви можете використовувати profileмодуль ( cProfileна Python 2):

$ python3 -mprofile your_module.py

Ви можете перейти -pдо timeitкоманди вище, якщо ви хочете використовувати той же таймер, profileякий використовує модуль.

Див. Як можна створити профіль Python?


7

Мені сподобалася відповідь Пола Макгуайра і я придумав форму менеджера контексту, яка більше відповідала моїм потребам.

import datetime as dt
import timeit

class TimingManager(object):
    """Context Manager used with the statement 'with' to time some execution.

    Example:

    with TimingManager() as t:
       # Code to time
    """

    clock = timeit.default_timer

    def __enter__(self):
        """
        """
        self.start = self.clock()
        self.log('\n=> Start Timing: {}')

        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        """
        """
        self.endlog()

        return False

    def log(self, s, elapsed=None):
        """Log current time and elapsed time if present.
        :param s: Text to display, use '{}' to format the text with
            the current time.
        :param elapsed: Elapsed time to display. Dafault: None, no display.
        """
        print s.format(self._secondsToStr(self.clock()))

        if(elapsed is not None):
            print 'Elapsed time: {}\n'.format(elapsed)

    def endlog(self):
        """Log time for the end of execution with elapsed time.
        """
        self.log('=> End Timing: {}', self.now())

    def now(self):
        """Return current elapsed time as hh:mm:ss string.
        :return: String.
        """
        return str(dt.timedelta(seconds = self.clock() - self.start))

    def _secondsToStr(self, sec):
        """Convert timestamp to h:mm:ss string.
        :param sec: Timestamp.
        """
        return str(dt.datetime.fromtimestamp(sec))

7

Для даних, які використовують Jupyter Notebook

У комірці ви можете використовувати %%timeмагічну команду Юпітера для вимірювання часу виконання:

%%time
[ x**2 for x in range(10000)]

Вихідні дані

CPU times: user 4.54 ms, sys: 0 ns, total: 4.54 ms
Wall time: 4.12 ms

Це зафіксує лише час виконання певної комірки. Якщо ви хочете зафіксувати час виконання всього ноутбука (тобто програми), ви можете створити новий блокнот у тому самому каталозі, а в новому блокноті виконати всі комірки:

Припустимо, зошит вище називається example_notebook.ipynb. У новому блокноті в тому ж каталозі:

# Convert your notebook to a .py script:
!jupyter nbconvert --to script example_notebook.ipynb

# Run the example_notebook with -t flag for time
%run -t example_notebook

Вихідні дані

IPython CPU timings (estimated):
  User   :       0.00 s.
  System :       0.00 s.
Wall time:       0.00 s.

5

Існує timeitмодуль, який може бути використаний для часового часу виконання коду Python.

Вона має детальну документацію та приклади в документації на Python, 26.6. timeit - Виміряйте час виконання невеликих фрагментів коду .


timeitУ запитанні явно згадується ОП . Питання в тому, як це можна використовувати тут (або чи слід його використовувати тут і які альтернативи). Ось можлива відповідь .
jfs

5

Використовуйте line_profiler .

line_profiler буде профілювати час виконання окремих рядків коду для виконання. Профілер реалізовується в C через Cython , щоб зменшити накладні профілі.

from line_profiler import LineProfiler
import random

def do_stuff(numbers):
    s = sum(numbers)
    l = [numbers[i]/43 for i in range(len(numbers))]
    m = ['hello'+str(numbers[i]) for i in range(len(numbers))]

numbers = [random.randint(1,100) for i in range(1000)]
lp = LineProfiler()
lp_wrapper = lp(do_stuff)
lp_wrapper(numbers)
lp.print_stats()

Результати будуть:

Timer unit: 1e-06 s

Total time: 0.000649 s
File: <ipython-input-2-2e060b054fea>
Function: do_stuff at line 4

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     4                                           def do_stuff(numbers):
     5         1           10     10.0      1.5      s = sum(numbers)
     6         1          186    186.0     28.7      l = [numbers[i]/43 for i in range(len(numbers))]
     7         1          453    453.0     69.8      m = ['hello'+str(numbers[i]) for i in range(len(numbers))]

5

Я використовував дуже просту функцію, щоб увімкнути частину виконання коду:

import time
def timing():
    start_time = time.time()
    return lambda x: print("[{:.2f}s] {}".format(time.time() - start_time, x))

І щоб використовувати його, просто зателефонуйте до коду, щоб виміряти час вибору функції, а потім викликайте функцію після коду з коментарями. Час з’явиться перед коментарями. Наприклад:

t = timing()
train = pd.read_csv('train.csv',
                        dtype={
                            'id': str,
                            'vendor_id': str,
                            'pickup_datetime': str,
                            'dropoff_datetime': str,
                            'passenger_count': int,
                            'pickup_longitude': np.float64,
                            'pickup_latitude': np.float64,
                            'dropoff_longitude': np.float64,
                            'dropoff_latitude': np.float64,
                            'store_and_fwd_flag': str,
                            'trip_duration': int,
                        },
                        parse_dates = ['pickup_datetime', 'dropoff_datetime'],
                   )
t("Loaded {} rows data from 'train'".format(len(train)))

Тоді вихід буде виглядати приблизно так:

[9.35s] Loaded 1458644 rows data from 'train'

5

У мене виникли одні й ті ж проблеми в багатьох місцях, тому я створив зручний пакет horology. Ви можете встановити його, pip install horologyа потім зробити це елегантно:

from horology import Timing

with Timing(name='Important calculations: '):
    prepare()
    do_your_stuff()
    finish_sth()

виведе:

Important calculations: 12.43 ms

Або навіть простіше (якщо у вас є одна функція):

from horology import timed

@timed
def main():
    ...

виведе:

main: 7.12 h

Він дбає про одиниці і округлення. Він працює з python 3.6 або новішою.


@DarrenZou перевірити більше документів та джерел тут
hans

Чи можу я отримати ці значення у змінній?
PepeElMago33

Так, використовувати main.interval.
Хан

3

Це відповідь Пола Макгвайра, яка працює на мене. Про всяк випадок, якщо у когось виникли проблеми із запуском цього.

import atexit
from time import clock

def reduce(function, iterable, initializer=None):
    it = iter(iterable)
    if initializer is None:
        value = next(it)
    else:
        value = initializer
    for element in it:
        value = function(value, element)
    return value

def secondsToStr(t):
    return "%d:%02d:%02d.%03d" % \
        reduce(lambda ll,b : divmod(ll[0],b) + ll[1:],
            [(t*1000,),1000,60,60])

line = "="*40
def log(s, elapsed=None):
    print (line)
    print (secondsToStr(clock()), '-', s)
    if elapsed:
        print ("Elapsed time:", elapsed)
    print (line)

def endlog():
    end = clock()
    elapsed = end-start
    log("End Program", secondsToStr(elapsed))

def now():
    return secondsToStr(clock())

def main():
    start = clock()
    atexit.register(endlog)
    log("Start Program")

timing.main()Після імпорту файла зателефонуйте зі своєї програми.


3

Timeit - клас в Python, який використовується для обчислення часу виконання невеликих блоків коду.

Default_timer - метод цього класу, який використовується для вимірювання часу настінного годинника, а не часу виконання процесора. Таким чином, це може заважати виконанню інших процесів. Таким чином, це корисно для невеликих блоків коду.

Зразок коду такий:

from timeit import default_timer as timer

start= timer()

# Some logic

end = timer()

print("Time taken:", end-start)

timeitкраща відповідь ІМО для багатьох випадків.
Марк

3

Пізніше відповідь, але я використовую timeit:

import timeit
code_to_test = """
a = range(100000)
b = []
for i in a:
    b.append(i*2)
"""
elapsed_time = timeit.timeit(code_to_test, number=500)
print(elapsed_time)
# 10.159821493085474

  • Загорніть весь код, включаючи будь-який імпорт, який ви можете мати, всередині code_to_test.
  • number Аргумент вказує кількість разів, який повинен повторити код.
  • Демо

А що, якщо ви хочете ввести час у розділ коду, який не можна поставити до рядка?
Даніель Стракабошко

@daniel Ви можете створити нове запитання. Якщо ви опублікуєте посилання тут, я можу вам допомогти.
CONvid19

2

Час виконання програми Python може бути невідповідним залежно від:

  • Одна і та ж програма може бути оцінена за допомогою різних алгоритмів
  • Час роботи залежить від алгоритмів
  • Час роботи залежить від реалізацій
  • Час роботи залежить від комп'ютерів
  • Час роботи не передбачувано на основі невеликих входів

Це тому, що найефективніший спосіб - використовувати «Порядок зростання» та навчитися нотації Великого «О», щоб це зробити правильно.

У будь-якому випадку, ви можете спробувати оцінити продуктивність будь-якої програми Python в конкретних машинах підрахунку кроків за секунду, використовуючи цей простий алгоритм: адаптуйте це до програми, яку ви хочете оцінити

import time

now = time.time()
future = now + 10
step = 4 # Why 4 steps? Because until here already four operations executed
while time.time() < future:
    step += 3 # Why 3 again? Because a while loop executes one comparison and one plus equal statement
step += 4 # Why 3 more? Because one comparison starting while when time is over plus the final assignment of step + 1 and print statement
print(str(int(step / 10)) + " steps per second")

2

Ви робите це просто в Python. Не потрібно ускладнювати це.

import time

start = time.localtime()
end = time.localtime()
"""Total execution time in seconds$ """
print(end.tm_sec - start.tm_sec)

2

Подібно до відповіді від @rogeriopvl, я додав незначну модифікацію для перетворення на годинні секунди, використовуючи ту саму бібліотеку для тривалих завдань.

import time
start_time = time.time()
main()
seconds = time.time() - start_time
print('Time Taken:', time.strftime("%H:%M:%S",time.gmtime(seconds)))

Вибірка зразка

Time Taken: 00:00:08

2

По-перше, встановіть humanfriendly package, відкривши командний рядок (CMD) як адміністратор і введіть там - pip install humanfriendly

Код:

from humanfriendly import format_timespan
import time
begin_time = time.time()
# Put your code here
end_time = time.time() - begin_time
print("Total execution time: ", format_timespan(end_time))

Вихід:

введіть тут опис зображення



1

Я спробував і знайшов різницю у часі, використовуючи наступні сценарії.

import time

start_time = time.perf_counter()
[main code here]
print (time.perf_counter() - start_time, "seconds")

0

Якщо ви хочете виміряти час у мікросекундах, тоді ви можете скористатися наступною версією, заснованою повністю на відповідях Пола Макгуайра та Нікьо - це код Python 3. Я також додав до нього якийсь колір:

import atexit
from time import time
from datetime import timedelta, datetime


def seconds_to_str(elapsed=None):
    if elapsed is None:
        return datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")
    else:
        return str(timedelta(seconds=elapsed))


def log(txt, elapsed=None):
    colour_cyan = '\033[36m'
    colour_reset = '\033[0;0;39m'
    colour_red = '\033[31m'
    print('\n ' + colour_cyan + '  [TIMING]> [' + seconds_to_str() + '] ----> ' + txt + '\n' + colour_reset)
    if elapsed:
        print("\n " + colour_red + " [TIMING]> Elapsed time ==> " + elapsed + "\n" + colour_reset)


def end_log():
    end = time()
    elapsed = end-start
    log("End Program", seconds_to_str(elapsed))


start = time()
atexit.register(end_log)
log("Start Program")

log () => функція, яка виводить інформацію про час.

txt ==> перший аргумент для входу в журнал та його рядок для позначення часу.

atexit ==> модуль Python для реєстрації функцій, які можна викликати, коли програма закінчується.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.