itsource

Python의 time.clock()과 time.time()의 정확도는?

mycopycode 2023. 1. 8. 14:39
반응형

Python의 time.clock()과 time.time()의 정확도는?

Python? time.clock()과 time.time() 중 어느 쪽을 타이밍으로 사용하는 것이 좋을까요?어떤 것이 더 정확할까요?

예를 들어 다음과 같습니다.

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

대.

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

3.3부터는 time.clock() 권장되지 않으며 time.process_time() 또는 time을 사용할 것을 권장합니다.대신 perf_counter()를 입력합니다.

타임 모듈 문서에 따르면 2.7 이전 버전:

time.clock()

Unix 에서는, 현재의 프로세서 시간을 초단위로 나타내는 부동 소수점 번호로 반환합니다."프로세서 시간"의 의미에 대한 정밀도, 사실 그 정의는 같은 이름의 C 함수에 의존하지만, 어떤 경우에도 이것은 Python이나 타이밍 알고리즘을 벤치마킹하기 위해 사용하는 함수입니다.

Windows 에서는, 이 함수는 Win32 함수의 Query Performance Counter()에 근거해, 이 함수에의 최초의 호출로부터 경과한 월 클럭 초수를 부동 소수점 번호로 반환합니다.해상도는 보통 1마이크로초보다 우수합니다.

또한 코드 스니펫을 벤치마킹하기 위한 타임릿모듈도 있습니다.

과 같습니다의 경우: 「」입니다.time.clock() 일부 를 들어 GPU에 )의 을 설정하고 있는는, 「GPU」(GPU)입니다.time.clock(), 「이 시간」을 삭제합니다.time.time()이치노

주의:사용하든 수 전환 , ...)에 따라 달라집니다.은, 「」로 악화됩니다.「 」는 「 」( 「 」 「 」 「 」( 「 」 「 」 「 」)로 됩니다.★★★★★★★★★★★★★★★★★★,time.time() 같이 요.time.clock()따라서 1개의 타이밍 테스트만 실행하는 것이 아니라 항상 일련의 테스트를 실행하여 평균/평균을 확인해야 합니다.

다른 사용자는 다음과 같이 대답했습니다.time.time() ★★time.clock()

단, 벤치마크/프로파일링 목적으로 코드 블록의 실행을 타이밍으로 설정하고 있는 경우는 모듈을 참조해 주십시오.

유의해야 할 은 '아까운 일'입니다.은, 「」에 영향을 줍니다.time.time() 아니다time.clock().

몇 가지 자동 테스트 실행을 통제해야 했어요테스트 케이스의 한 단계가 소정의 시간보다 오래 걸리면 TC는 중단되고 다음 단계로 넘어갑니다.

단, 시스템 시각 변경(테스트 대상 어플리케이션의 스케줄러 모듈을 체크하기 위한 절차)이 필요할 수 있습니다.따라서 향후 시스템 시각을 몇 시간 설정한 후 TC 타임아웃이 만료되어 테스트케이스가 중단되었습니다. 수 없이 이직했습니다.time.time()로로 합니다.time.clock()이 문제를 적절하게 처리할 수 있습니다.

clock() -> "-"

후 CPU에 대한 첫 콜 또는 clock()이것은 시스템 기록과 같은 정밀도를 가지고 있습니다.

time() -> "-"

Epoch 이후의 현재 시간을 초 단위로 반환합니다.시스템 클럭이 1초의 분수를 나타내고 있는 경우는, 1초의 분수가 존재할 가능성이 있습니다.

은 ★★★time()하는 것이 에 보다은 operating system은 하지 않기 때문입니다.

네가 뭘 신경 쓰느냐에 달렸어WALL TIME(벽에 있는 클럭의 시간)을 의미하는 경우 time.clock()은 CPU 시간을 관리할 수 있기 때문에 정확도가 없습니다.

time() 가 높다clock()Linux 서 linux 。 clock()열 번한편, 「 」는, 「 」, 「 」의 사이에time()현의 정밀도를 제공합니다. 2.6 python 2.6 python 2.6 python 2.6 python 2.6 python 2.6 python 2.6 python 2.6 python으로 테스트합니다.

using time():

1 requests, response time: 14.1749382019 ms
2 requests, response time: 8.01301002502 ms
3 requests, response time: 8.01491737366 ms
4 requests, response time: 8.41021537781 ms
5 requests, response time: 8.38804244995 ms

using clock():

1 requests, response time: 10.0 ms
2 requests, response time: 0.0 ms 
3 requests, response time: 0.0 ms
4 requests, response time: 10.0 ms
5 requests, response time: 0.0 ms 
6 requests, response time: 0.0 ms
7 requests, response time: 0.0 ms 
8 requests, response time: 0.0 ms

이 지적한 와 같이time.clock() 위해 폐지되다time.perf_counter() ★★★★★★★★★★★★★★★★★」time.process_time()그러나 Python 3.7은 , , 및 와 함께 나노초 분해능 타이밍을 다른 3가지 기능과 함께 제공합니다.

PEP 564 에서는, 다음의 6 nsecond 해상도 기능에 대해 자세하게 설명합니다.

time.clock_gettime_ns(clock_id)

time.clock_settime_ns(clock_id, time:int)

time.monotonic_ns()

time.perf_counter_ns()

time.process_time_ns()

time.time_ns()

이러한 함수는 _ns 서픽스가 없는 버전과 비슷하지만 Python int로 몇 나노초를 반환합니다.

다른 사람들도 지적했듯이 모듈을 사용하여 함수와 작은 코드 조각의 시간을 설정합니다.

차이점은 플랫폼에 따라 다릅니다.

예를 들어 clock()은 Linux와 매우 다릅니다.

설명한 예에서는 "timeit" 모듈을 대신 사용해야 할 수 있습니다.

이 코드를 사용하여 두 가지 방법을 비교합니다.OS는 Windows 8, 프로세서 core i5, RAM 4GB

import time

def t_time():
    start=time.time()
    time.sleep(0.1)
    return (time.time()-start)


def t_clock():
    start=time.clock()
    time.sleep(0.1)
    return (time.clock()-start)




counter_time=0
counter_clock=0

for i in range(1,100):
    counter_time += t_time()

    for i in range(1,100):
        counter_clock += t_clock()

print "time() =",counter_time/100
print "clock() =",counter_clock/100

출력:

time() = 0.0993799996376

clock() = 0.0993572257367

Unix time.clock()에서는 현재 프로세스에서 사용된 CPU 시간을 측정하므로 과거 어느 시점부터 경과된 시간을 측정하는 데는 적합하지 않습니다.Windows 에서는, 함수에의 최초의 호출로부터 경과한 월클럭 초수를 측정합니다.어느 시스템에서도 time.time()은 에폭 이후 경과한 초수를 반환합니다.

Windows 전용의 코드를 쓰는 경우는, 어느쪽인가를 사용할 수 있습니다(단, time.clock()에 대해서는 감산할 필요가 없습니다).Unix 시스템에서 실행할 예정이거나 이식 가능한 코드가 필요한 경우 time.time()을 사용합니다.

time.clock()Python 3.8에서는 플랫폼에 의존한 동작이 있기 때문에 삭제되었습니다.

  • Unix 에서는, 현재의 프로세서 시간을 초단위로 나타내는 부동 소수점 번호로 반환합니다.
  • Windows 에서는, 이 함수가 이 함수에의 최초의 호출로부터 경과한 월클럭 초수를 부동 소수점 번호로 반환합니다.

    print(time.clock()); time.sleep(10); print(time.clock())
    # Linux  :  0.0382  0.0384   # see Processor Time
    # Windows: 26.1224 36.1566   # see Wall-Clock Time
    

그럼 어떤 기능을 선택할까요?

  • 프로세서 시간:이 특정 프로세스가 CPU에서 실행되는 데 걸리는 시간입니다. 절전, 웹 요청 대기 또는 다른 프로세스만 실행되는 시간은 이 작업에 영향을 미치지 않습니다.

    • 사용하다time.process_time()
  • 벽시계 시간:이는 "벽에 걸려 있는 시계" 즉, 실시간 외부에 얼마나 많은 시간이 경과했는지를 나타냅니다.

    • 사용하다time.perf_counter()

      • time.time()또한 벽시계 시간을 측정하지만 리셋할 수 있으므로 과거로 돌아갈 수 있습니다.
      • time.monotonic()재설정할 수 없지만(초음파 = 앞으로만 진행됨) 정밀도는 보다 낮습니다.time.perf_counter()

간단한 답변: Python의 타이밍에 time.clock()사용합니다.

*nix 시스템에서 clock()은 프로세서 시간을 부동소수점 숫자로 초 단위로 반환합니다.Windows 에서는, 이 함수에의 최초의 콜로부터 경과한 초수를 부동 소수점 번호로 반환합니다.

time()은 에폭(UTC) 이후의 초수를 부동소수점 숫자로 반환합니다.(time()이 부동소수점 번호를 반환하더라도) 1초의 정밀도를 얻을 수 있다는 보장은 없습니다.또, 이 함수에의 2개의 콜 사이에 시스템클락이 되돌려져 있는 경우, 두 번째 함수 콜은 작은 값을 반환하는 것에 주의해 주세요.

제가 알기론 time.clock()은 시스템이 허용하는 한 정확합니다.

정답: 분수의 길이가 같습니다.

하지만 만약subjecttime?

간단한 테스트 케이스:

import timeit
import time

clock_list = []
time_list = []

test1 = """
def test(v=time.clock()):
    s = time.clock() - v
"""

test2 = """
def test(v=time.time()):
    s = time.time() - v
"""
def test_it(Range) :
    for i in range(Range) :
        clk = timeit.timeit(test1, number=10000)
        clock_list.append(clk)
        tml = timeit.timeit(test2, number=10000)
        time_list.append(tml)

test_it(100)

print "Clock Min: %f Max: %f Average: %f" %(min(clock_list), max(clock_list), sum(clock_list)/float(len(clock_list)))
print "Time  Min: %f Max: %f Average: %f" %(min(time_list), max(time_list), sum(time_list)/float(len(time_list)))

스위스 연구소에서 일하진 않지만 테스트를 해봤어요

이 질문에 근거해:time.clock()보다 낫다time.time()

편집:time.clock()내부 카운터이므로 외부에서 사용할 수 없습니다.제한이 있습니다.max 32BIT FLOATfirst/last 값을 저장하지 않으면 카운트를 계속할 수 없습니다.다른 하나의 카운터를 병합할 수 없습니다...

Ubuntu Linux와 Windows 7의 테스트 결과 비교.

Ubuntu에서

>>> start = time.time(); time.sleep(0.5); (time.time() - start)
0.5005500316619873

Windows 7의 경우

>>> start = time.time(); time.sleep(0.5); (time.time() - start)
0.5

언급URL : https://stackoverflow.com/questions/85451/pythons-time-clock-vs-time-time-accuracy

반응형