필자가 작성한 두 가지 방법으로 timeit 함수를 사용하여 일부 메트릭을 실행하고 있는데 문제가 있습니다. 단순화 된 예는 아래 파일을 참조하십시오timeit에 사용할 함수를 올바르게 가져 오는 방법
fileA.py을이 단독으로 실행하고 나는 timeit과 기능, foo를 테스트하기 위해 노력하고있어 :
if (len(sys.argv) < 2):
print "Need a command line argument, exiting"
sys.exit(1)
def foo(n):
#does some stuff, returns an int
이 기능은 잘 독립, 내가 실행할 수있는 작품을 그것과 같이 ./fileA.py 5
나는 foo의 다른 구현 인 fileB.py
과 비슷한 파일을 가지고있다. 그러나 foo의 내부를 제외하고는 정확히 같다.
지금 나는 내가 모두 FILEA에 timeit 사용하기 위해 노력하고있어 FILEC 및 fileB (생략 fileB 부분)이 있습니다
for n in range(0,10):
setupStr = 'from fileA import foo'
setupStr += '; from __main__ import n'
mytime = timeit.Timer('foo(n)', setupStr)
timeTaken = mytime.timeit(1)
print #results, not important
내가 점점 오전 문제입니다 내가 FILEC를 실행할 때. py, "명령 행 인수, exitng가 필요합니다"가 나오고 종료됩니다. 이 파일 fileA.py에서 오는 이해하지만,이 코드 부분을 전혀 실행되는 이유는 무엇입니까? 나는 timeit이 작동하는 방식으로, fileA에서 foo 만 가져올 것이라고 생각하고 있었다. 내가 틀렸다고 생각 하나? 그렇다면 어떻게하면이 문제를 해결할 수있는 가장 좋은 방법이 될 수 있습니까? 따라서 foo(n)
메서드를 테스트하고 필요한 명령 줄 인수로 독립 실행 형 fileA의 기능을 유지할 수 있습니까?
것은 또한 단순화 할 수 있습니다 :
좀 더 자세한 설명은이 질문에 대한 허용 대답을 참조하십시오 :이 문제를 방지하려면
fileA
가에 독립형 호출되는 경우에만 실행해야하는데 코드를 포장 타이밍에 대한 접근 방식은 가져 오기 문제를 해결하지 못한다 : 먼저 모듈을 직접 가져온 다음'functools.partial'을 사용하여 코드가있는 문자열 대신에'timeit'에 직접 전달하는 호출 가능 함수를 작성하십시오). –@KarlKnechtel Nifty, 저는 꽤 자주 timeit을 사용할 것입니다 (이것은 데이터 구조의 과정입니다). 그래서 다음 번에 시도해 보겠습니다. – turbo