[python] 파이썬 프로그램 실행 시간을 어떻게 얻습니까?

파이썬에 명령 행 프로그램이 있는데 완료하는 데 시간이 걸립니다. 달리는 데 걸리는 정확한 시간을 알고 싶습니다.

timeit모듈을 살펴 보았지만 작은 코드 조각만을위한 것 같습니다. 전체 프로그램의 시간을 정하고 싶습니다.



답변

파이썬에서 가장 간단한 방법 :

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

이것은 프로그램을 실행하는 데 최소 10 분의 1 초가 걸린다고 가정합니다.

인쇄물:

--- 0.764891862869 seconds ---


답변

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숨겨진 기능을 피하기 위해 부동 소수점 수를 hh : mm : ss.sss 형식으로 포맷합니다.)

참고 : 위 코드의 Python 3 버전은 여기 또는 여기 에서 찾을 수 있습니다 .


답변

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


답변

나는 Paul McGuire의 답변을 정말로 좋아 하지만 Python 3을 사용합니다. 따라서 관심있는 사람들을 위해 * nix의 Python 3에서 작동하는 그의 답변이 수정되었습니다 (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")

이것이 유용하다는 것을 알게 되더라도, 대부분의 작업을했던 것처럼이 답변 대신 그의 답변을 계속 투표해야합니다.).


답변

import time

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

time.clock()프로세서 시간을 반환하여이 프로세스에서 사용한 시간 만 계산할 수 있습니다 (어쨌든 Unix에서). 문서는 “어쨌든 이것은 파이썬 또는 타이밍 알고리즘 벤치마킹에 사용하는 기능”이라고 말합니다.


답변

나는 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

JF Sebastian이 언급 했듯이이 접근법은 현지 시간이 까다로운 몇 가지 사례가 발생할 수 있으므로 사용하는 것이 더 안전합니다.

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


답변

Python 프로파일 러 cProfile을 사용하여 CPU 시간 과 추가로 각 함수에 소요 된 시간 및 각 함수가 호출 된 횟수 를 측정 할 수 있습니다 . 시작 위치를 몰라도 스크립트 성능을 향상시키려는 경우 매우 유용합니다. 이 답변 다른 스택 오버플로 질문에 꽤 좋다. 문서 도 살펴 보는 것이 좋습니다 .

다음은 명령 행에서 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}