[英]How to pause and resume Python threading.Timer
在python中, threading.Timer
可以在一段時間后正常執行函數。 但是沒有暫停或繼續功能。 還有其他方法嗎?
需要這樣的東西。
from threading import Timer
from time import sleep
def Hello():
print "hello"
t=Timer(10, Hello)
t.start()
sleep(3)
### <Pause Timer t>
### <do some work>
### <Resume Timer t>
如果知道定時器已啟動多少時間或還剩多少時間,這也將很有幫助。 因此,可以執行以下操作:
### x = Time passed by Timer t
### t.cancel()
### <do some work>
### t=Timer(10-x, Hello)
### t.start()
編輯1:
這是我在vitaut回答后的代碼:
## My Timer Class ##
from threading import Timer as threadTimer
from time import time, sleep
from random import randint as rint
class MyTimer:
def __init__(self, key, delete):
self.startTime = time()
self.timer = threadTimer(15, delete, args=[key])
self.timer.start()
def pause(self):
self.timer.cancel()
self.endTime = time()
def resume(self, delete, key):
self.timer = threadTimer(15-(self.endTime-self.startTime), delete, args=[key])
self.timer.start()
def cancel(self):
self.timer.cancel()
我正在使用以下代碼進行測試:
class MyClass:
def __init__(self):
self.dict={}
def delete(self, key):
print key, time()-self.dict[key]["stime"]
self.dict[key]["timer"]=None
self.dict[key]=None
del self.dict[key]
def doSomeWork(self, key):
for i in xrange(10):
x=str(rint(0,3))
if self.dict.has_key(key):
self.dict[key]["timer"].pause()
print key,
sleep(1)
self.dict[key]["timer"].resume(self.delete, key)
print
def createDict(self):
print "Pausing Timer for 1 second for ",
for i in xrange(10):
self.dict[i]={}
self.dict[i]["timer"]=MyTimer(key, self.delete)
self.dict[i]["stime"]=time()
x=MyClass()
x.createDict()
x.doSomeWork()
輸出:
Pausing Timer for 1 second for 0 1 0 2 1 0 2 1 1 0
3 15.0000641346
4 15.0000319481
5 15.0000360012
6 15.0000460148
7 15.0002529621
8 15.0000050068
9 15.0001029968
0 16.000754118
2 16.0007479191
1 16.0011930466
由於它會用鍵1暫停Timer每次4次,持續1秒。 因此,1的最終時間應為19+秒(預期)。 但是它只顯示16。
AFAIK Timer
類沒有暫停/繼續功能,但是您可以通過start
/ cancel
輕松地模擬它,並跟蹤自己啟動計時器的時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.