在event.wait之前获取剩余时间在Python中完成
我正在编写一个Python脚本,其中有一个正在运行的线程,可以计算一些值并每小时创建一个图形。我想要做的是在该线程中有一个函数,告诉我在下一次更新发生之前还剩多少时间。我目前的执行情况如下:在event.wait之前获取剩余时间在Python中完成
class StatsUpdater(threading.Thread):
def __init__(self, updateTime):
threading.Thread.__init__(self)
self.event = threading.Event()
self.updateTime = updateTime
def run(self):
while not self.event.is_set():
self.updateStats()
self.event.wait(self.updateTime)
def updateStats(self):
print "Updating Stats"
tables = SQLInterface.listTables()
for table in tables:
PlotTools.createAndSave(table)
def stop(self):
self.event.set()
所以我想在这个类中,让我回剩余时间gefore self.event.wait(self.updateTime)超时被附加其它功能是什么,这样的事情:
def getTimeout(self):
return self.event.timeRemaining()
这是可能以某种方式?
好吧,我有一个仲裁协议我的问题。我在StatsUpdater.run中实现了一个变量:
self.lastUpdateTime = int(time.time())
就在我做更新功能之前。
现在,当我打电话getTimeout(),我做的:
def getTimeout(self):
timePassed = int(time.time() - self.lastUpdateTime
return self.updateTime - timePassed
这样,我没有计算密集型的线程运行和计算 一小笔钱每一秒,但我仍然获得了相当不错的指示下一次更新的时间,因为更新之间的时间量也是已知的;)
有没有支持直接获取剩余时间,但你可以睡几次,并跟踪剩余时间。
def __init__(self, updateTime):
threading.Thread.__init__(self)
self.event = threading.Event()
self.updateTime = updateTime
self.wait_time=None
def run(self):
while not self.event.is_set():
self.updateStats()
try:
self.wait_time=self.updateTime
inttime=int(self.updateTime)
remaining=inttime-self.updateTime
self.event.wait(remaining)
for t in reversed(range(inttime)):
self.wait_time=t+1
self.event.wait(1)
finally:
self.wait_time=0
然后用
def getTimeout(self):
return self.wait_time
是的,我想到了我自己也是,谢谢你的反馈。问题是,这个程序运行在Raspberry Pi上(不知道如果你听说过它),所以我有很少的资源,我担心不得不做wait_time = t + 1每秒只会消耗很多时间/资源系统。有没有其他办法可以实现这一点?如果不是这样,请确保它保持现在的状态,能够读取时间,直到下一次更新更为奢侈,然后才是必须的。 – Maarten 2012-08-05 20:16:43
试试吧。也许这是缓慢的,但我怀疑你会注意到。你也可以将睡眠时间改为5秒。 – 2012-08-05 21:06:40
当然,为什么不.. – 2012-08-05 21:08:55
感谢您的帮助,我在阅读您的回复时得到了主意;) – Maarten 2012-08-05 21:25:29