programing

Python 속도 테스트 - 시간 차이 - 밀리초

mailnote 2023. 6. 15. 22:01
반응형

Python 속도 테스트 - 시간 차이 - 밀리초

코드 섹션을 빠르게 테스트하기 위해 파이썬에서 2번 비교하는 올바른 방법은 무엇입니까?API 문서를 읽어 보았습니다.제가 타임 델타 같은 것을 이해할 수 있을지 잘 모르겠습니다.

지금까지 제 코드는 다음과 같습니다.

from datetime import datetime

tstart = datetime.now()
print t1

# code to speed test

tend = datetime.now()
print t2
# what am I missing?
# I'd like to print the time diff here

datetime.timedelta 두 날짜 시간의 차이일 뿐입니다. 즉, 일/초/마이크로초 단위의 기간과 같습니다.

>>> import datetime
>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> c = b - a

>>> c
datetime.timedelta(0, 4, 316543)
>>> c.days
0
>>> c.seconds
4
>>> c.microseconds
316543

알아두시기 바랍니다.c.microseconds시간 델타의 마이크로초 부분만 반환합니다!타이밍을 위해 항상 다음을 사용합니다.c.total_seconds().

datetime.timedelta를 사용하여 다음과 같은 모든 종류의 수학을 수행할 수 있습니다.

>>> c / 10
datetime.timedelta(0, 0, 431654)

wallclock 시간 대신 CPU 시간을 보는 것이 더 유용할 수 있습니다. 운영 체제에 따라 다르지만...Unix-like 시스템에서 'time' 명령을 확인합니다.

Python 2.7 이후로timedelta.total_seconds()방법.경과 시간(밀리초)을 얻으려면 다음을 수행합니다.

>>> import datetime
>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> delta = b - a
>>> print delta
0:00:05.077263
>>> int(delta.total_seconds() * 1000) # milliseconds
5077

대신 time it 모듈을 사용하는 것이 좋습니다.

늦은 시간인 것은 알지만, 저는 사실 다음을 사용하는 것을 정말 좋아합니다.

import time
start = time.time()

##### your timed code here ... #####

print "Process time: " + (time.time() - start)

time.time()에포크 이후의 초를 제공합니다.이 시간은 표준화된 시간(초)이므로 종료 시간에서 시작 시간(초)을 빼면 공정 시간(초)을 얻을 수 있습니다. time.clock()벤치마킹에 유용하지만, 프로세스가 얼마나 걸렸는지 알고 싶다면 쓸모가 없다는 것을 알게 되었습니다.예를 들어, "내 프로세스는 10개의 프로세서 클럭 유닛을 필요로 한다"는 말보다 "내 프로세스는 10초가 걸린다"는 말이 훨씬 직관적입니다.

>>> start = time.time(); sum([each**8.3 for each in range(1,100000)]) ; print (time.time() - start)
3.4001404476250935e+45
0.0637760162354
>>> start = time.clock(); sum([each**8.3 for each in range(1,100000)]) ; print (time.clock() - start)
3.4001404476250935e+45
0.05

위의 첫 번째 예에서는 time.clock()에 대해 0.05의 시간 대 time.time()에 대해 0.06377의 시간이 표시됩니다.

>>> start = time.clock(); time.sleep(1) ; print "process time: " + (time.clock() - start)
process time: 0.0
>>> start = time.time(); time.sleep(1) ; print "process time: " + (time.time() - start)
process time: 1.00111794472

두 번째 예제에서는 프로세스가 1초 동안 절전 모드를 취했음에도 불구하고 프로세서 시간이 "0"으로 표시됩니다. time.time()1초가 조금 넘는 시간을 정확하게 표시합니다.

다음을 사용할 수도 있습니다.

import time

start = time.clock()
do_something()
end = time.clock()
print "%.2gs" % (end-start)

아니면 파이썬 프로파일러를 사용할 수도 있습니다.

다음 코드는 시간 정보를 표시해야 합니다...

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart

차이를 간단히 인쇄할 수 있습니다.

print tend - tstart

프로파일 모듈을 조사할 수도 있습니다.속도 저하가 어디에 있는지 더 잘 파악할 수 있으며, 대부분의 작업이 완전히 자동화됩니다.

저는 파이썬 프로그래머는 아니지만 구글을 사용하는 방법을 알고 있습니다. 제가 발견한 것은 "-" 연산자를 사용하는 것입니다.코드 완료하기

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart

또한 시간을 렌더링하기 위해 strftime() 함수를 사용하여 시간 범위 계산 형식을 지정할 수 있는 것처럼 보이지만 사용자는 만족합니다.

화살표: Python을 위한 더 나은 날짜와 시간

import arrow
start_time = arrow.utcnow()
end_time = arrow.utcnow()
(end_time - start_time).total_seconds()  # senconds
(end_time - start_time).total_seconds() * 1000  # milliseconds

time.time() / datetime은 빠른 사용에 좋지만 항상 100% 정확한 것은 아닙니다.그런 이유로, 저는 무엇이 무엇인지 알아보기 위해 stdlib 프로파일러(특히 핫샷) 중 하나를 사용하는 것을 좋아합니다.

Matlab/Octave의 Matlab/Octave를 입니다.tic toc기능들.

사용 예:

time_var = time_me(); # get a variable with the current timestamp

... run operation ...

time_me(time_var); # print the time difference (e.g. '5 seconds 821.12314 ms')

기능:

def time_me(*arg):
    if len(arg) != 0: 
        elapsedTime = time.time() - arg[0];
        #print(elapsedTime);
        hours = math.floor(elapsedTime / (60*60))
        elapsedTime = elapsedTime - hours * (60*60);
        minutes = math.floor(elapsedTime / 60)
        elapsedTime = elapsedTime - minutes * (60);
        seconds = math.floor(elapsedTime);
        elapsedTime = elapsedTime - seconds;
        ms = elapsedTime * 1000;
        if(hours != 0):
            print ("%d hours %d minutes %d seconds" % (hours, minutes, seconds)) 
        elif(minutes != 0):
            print ("%d minutes %d seconds" % (minutes, seconds))
        else :
            print ("%d seconds %f ms" % (seconds, ms))
    else:
        #print ('does not exist. here you go.');
        return time.time()

은 야합다니해를 사용해야 .time.time()대신, 유닉스 시간을 고정밀로 출력합니다.

다음 코드 사용:

from time import time

tstart = time()
doSomething()
tend = time()
difference = tend - tstart
print("The doSomething function took {} seconds to execute".format(difference))

이렇게 시간을 사용하여 모듈이라는 스크립트를 테스트할 수 있습니다.파이의

$ python -mtimeit -s 'import module'
start = datetime.now() 

#code for which response time need to be measured.

end = datetime.now()
dif = end - start
dif_micro = dif.microseconds # time in microseconds
dif_millis = dif.microseconds / 1000 # time in millisseconds

로그 항목 간의 지연을 분석하기 위해... 등과 같은 것이 필요한 경우.

def get_time_diff_between_timestruct_tuples(timestruct_tuples):
    """
    expecting input like:
    [(0, datetime.datetime(2021, 10, 27, 16, 6, 8, 590892)),
    (1, datetime.datetime(2021, 10, 27, 16, 6, 8, 591833)),
    (2, datetime.datetime(2021, 10, 27, 16, 6, 9, 434053)),
    (3, datetime.datetime(2021, 10, 27, 16, 6, 9, 878021)), ...]
    
    output like:
    [0.941, 0.84222, 0.443968, ...]
    """
    
    def seconds_mms_diff(t0, t1):
        diff = t1 - t0
        s = diff.seconds
        mms = diff.microseconds
        return float(f"{s}.{mms}")
    
    timediffs = []
    init = timestruct_tuples[0][1]
    idx = 0
    while idx < (len(timestruct_tuples)-1):
        timediffs.append(seconds_mms_diff(init, timestruct_tuples[idx+1][1]))
        idx += 1
        init = timestruct_tuples[idx][1]
    return timediffs

언급URL : https://stackoverflow.com/questions/766335/python-speed-testing-time-difference-milliseconds

반응형