道歉重新發布,但我不得不編輯這個問題,當我開始工作,並意識到我需要有一個帳戶來這樣做。所以這裏再次提到(多一點情況)。Python中的setTrace()(REDX)
我想時間多久腳本需要執行,我想通過檢查每行代碼執行後經過的時間來做到這一點。我之前在腳本包含方法定義時已經完成了這個工作,但我不確定在這個實例中它是如何工作的。
所以我的問題是:有一種方法可以在沒有方法定義的腳本中使用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)
謝謝,這正是我一直在尋找!我不確定'atexit'是不是我想要的。我期望不斷檢查時間,如果超過了某個限制,那麼腳本將終止。主要用於檢查無限循環。你會用什麼來做到這一點? – Leonidas 2009-10-21 15:43:38
在Linux或任何其他Unix-y操作系統(==大部分窗口)中,signal.alarm,請參閱http://docs.python.org/library/signal.html?highlight=alarm#signal.alarm - after signal.alarm(3600)例如,您將在一小時後獲得SIGALRM,您可以處理它或讓它殺死您的進程。在Windows中,我想我會用一個「睡眠線程」來克隆它,如果它在超時後喚醒它,就會終止進程。在某些情況下,產生一個獨立的看門狗進程會更加穩固(如果你的進程被嵌入了Python控制之外的無法等待的不可中斷等待)。 – 2009-10-21 17:23:51