테스트 스위트는 가져온 timeit
것을 사용하려고 시도하지 않으므로 의도가 무엇인지 말하기가 어렵습니다. 그럼에도 불구하고 이것은 정식 답변이므로 Martijn의 답변을timeit
자세히 설명 하는 완전한 예가 순서대로 보입니다 .
에 대한 문서timeit
제공하는 많은 예제와 플래그의 가치가 체크 아웃. 명령 행의 기본 사용법은 다음과 같습니다.
$ python -mtimeit "all(True for _ in range(1000))"
2000 loops, best of 5: 161 usec per loop
$ python -mtimeit "all([True for _ in range(1000)])"
2000 loops, best of 5: 116 usec per loop
-h
모든 옵션을 보려면 다음을 실행 하십시오. Python MOTW 에는 timeit
명령 행에서 가져 오기 및 여러 줄 코드 문자열을 통해 모듈을 실행하는 방법을 보여주는 훌륭한 섹션이 있습니다.
스크립트 형식에서는 일반적으로 다음과 같이 사용합니다.
import argparse
import copy
import dis
import inspect
import random
import sys
import timeit
def test_slice(L):
L[:]
def test_copy(L):
L.copy()
def test_deepcopy(L):
copy.deepcopy(L)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--n", type=int, default=10 ** 5)
parser.add_argument("--trials", type=int, default=100)
parser.add_argument("--dis", action="store_true")
args = parser.parse_args()
n = args.n
trials = args.trials
namespace = dict(L = random.sample(range(n), k=n))
funcs_to_test = [x for x in locals().values()
if callable(x) and x.__module__ == __name__]
print(f"{'-' * 30}\nn = {n}, {trials} trials\n{'-' * 30}\n")
for func in funcs_to_test:
fname = func.__name__
fargs = ", ".join(inspect.signature(func).parameters)
stmt = f"{fname}({fargs})"
setup = f"from __main__ import {fname}"
time = timeit.timeit(stmt, setup, number=trials, globals=namespace)
print(inspect.getsource(globals().get(fname)))
if args.dis:
dis.dis(globals().get(fname))
print(f"time (s) => {time}\n{'-' * 30}\n")
필요한 함수와 인수를 쉽게 넣을 수 있습니다. 부적절한 기능을 사용할 때는주의를 기울이고 상태를 관리하십시오.
샘플 출력 :
$ python benchmark.py --n 10000
------------------------------
n = 10000, 100 trials
------------------------------
def test_slice(L):
L[:]
time (s) => 0.015502399999999972
------------------------------
def test_copy(L):
L.copy()
time (s) => 0.01651419999999998
------------------------------
def test_deepcopy(L):
copy.deepcopy(L)
time (s) => 2.136012
------------------------------
timeit
입니까? 나는 그렇지 않다고 생각한다. 이 경우 제목에서 "with Pythons timeit"을 제거해야합니다.