문제

다시 게시하려는 사과하지만 일을 시작했을 때이 질문을 편집해야했고 계정이 필요하다는 것을 깨달았습니다. 그래서 여기서 다시 (조금 더 맥락을 가지고) 다시갑니다.

스크립트가 실행하는 데 시간이 오래 걸리는 시간을 보내려고 노력하고 있으며 모든 코드 라인이 실행 된 후 경과 시간을 확인하여 그렇게 할 생각입니다. 스크립트에 메소드 정의가 포함되어 있었지만이 인스턴스에서 어떻게 작동하는지 잘 모르겠습니다.

내 질문은 : 메소드 정의가없는 스크립트에서 settrace () 함수를 사용하는 방법이 있습니까? 즉

for i in range(1, 100):
    print i

def traceit(frame, event, arg):
    if event == "line":
        lineno = frame.f_lineno
        print "line", lineno

    return traceit

sys.settrace(traceit)
도움이 되었습니까?

해결책

아니요 문서 "새로운 로컬 범위가 입력 될 때마다 추적 함수가 호출됩니다 ( 'Call'으로 설정됨)" - 로컬 범위를 입력하지 않으면 (그리고 글로벌 범위에서만 실행) 추적 함수는 절대 호출되지 않습니다. . Settrace는 어쨌든 "스크립트가 실행하는 데 걸리는 시간"이 너무 많이 측정되는 것을 변경하기 위해 어쨌든 너무 침습적입니다. 당신이 말하는 것이 실제로 당신이 원하는 것이라면, 실행을 시작할 때 시간을내어 등록하십시오. atexit 시간을 다시 얻고 차이를 인쇄하는 함수. 당신이 원하는 것이 다르다면, 즉 프로파일 링, 보다 cprofile .

또한 제공하는 코드 예제는 유용한 일을 할 수 없을 것입니다 (들여 쓰기 오류를 수정하기 위해 편집 했음에도 불구하고) : 먼저 루프를 고려하고 다음 기능을 def하고 마지막으로 settrace를 호출합니다. 즉시 끝납니다. 그 후 더 이상 코드가 없기 때문에! 어떤 일이 일어나기를 원한다면 ~ 전에 그 루프가 시작되고, 당신은 모듈 최상층에 모든 것을 갖고 싶지만 (나쁜 아이디어, 그러나 무엇이든, 당신은 "무엇이든"어휘를 넣어야합니다. ~ 전에 후 루프, 이후가 아니라 ... ;-)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top