在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()

因此,我想在该类中添加另一个函数,它可以让我返回self.event.wait(self.updateTime)超时前的剩余时间,类似于以下内容:

def getTimeout(self):
    return self.event.timeRemaining()

这有可能吗?

不支持直接获取剩余时间,但您可以睡几次,并跟踪剩余时间。

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

好吧,我对我的问题有一个折衷方案。我在StatsUpdater.run中实现了一个变量:

self.lastUpdateTime = int(time.time())

就在我执行更新功能之前。

现在,当我调用getTimeout()时,我会调用:

def getTimeout(self):
    timePassed = int(time.time() - self.lastUpdateTime
    return self.updateTime - timePassed

这样,我就没有计算密集型的线程在运行和计算每秒一个很小的总数,但我仍然能很好地指示下一次更新的时间,因为更新之间的时间总量也是已知的;)

相关内容

  • 没有找到相关文章

最新更新