您當前的示例運行到的遞歸限制的問題,因爲它的方式調用本身遞歸地。堆棧大小繼續增長並增長,直到達到默認值1000,最有可能。看到這個變形例:
import time
import inspect
import thread
tx1 = time.time()
def loop(event):
print "Stack size: %d" % len(inspect.stack())
tx2 = time.time()
if tx2-tx1 > 0.7:
print "Running code."
return loop(1)
thread.start_new_thread(loop, (1,))
time.sleep(60)
## OUTPUT ##
Stack size: 1
Running code.
Stack size: 2
Running code.
...
Stack size: 999
Running code.
Exception RuntimeError: 'maximum recursion depth exceeded in ...
它可能比較容易使用,可以運行,直到你告訴它停止自定義Thread類。這樣堆棧大小不會繼續增長。它只是循環並調用你的處理函數。 下面是一個完整的工作例如:
import time
from threading import Thread
class IntervalTimer(Thread):
def __init__(self, secs, func, args=(), kwargs={}):
super(IntervalTimer, self).__init__(target=func, args=args, kwargs=kwargs)
self.__interval = secs
self.__func = func
self.__args = args
self.__kwargs = kwargs
self.__exiting = False
def run(self):
while not self.__exiting:
time.sleep(self.__interval)
self.__func(*self.__args, **self.__kwargs)
def cancel(self):
self.__exiting = True
def test(val):
print val
if __name__ == "__main__":
t = IntervalTimer(2, test, args=("Hi",))
t.start()
time.sleep(10)
t.cancel()
來源
2011-10-07 21:17:43
jdi
這可能會幫助您:http://stackoverflow.com/questions/156330/get-timer-ticks-in-python – GoingTharn
你們是不是要達到一個延遲計時器?在這個例子中,一旦時間超過0.7,它會不斷運行你的重複代碼,直到你再次觸及tx1值,這將需要保護,因爲它的共享內存 – jdi
@jdi只是一個計時器,在tot毫秒後重複函數 – Pella86