我有一个程序,经常将时钟取消计划和重新计划。然后我发现有时时钟对象堆栈没有被调度。
这是发生的情况的一个例子。
def functionA(self):
if self.clock_variable is None:
self.clock_variable = Clock.schedule_interval(self._function, 1)
...
def functionB(self):
if self.clock_variable is not None:
self.clock_variable.cancel()
self.clock_variable = None
这类任务虽然看起来似乎不应该执行,但很少会引起时钟对象无法被移除并休眠在self.clock_variable内部的问题。
在Kivy中,当分配一个时钟变量时,我可以在一个变量中分配2个或多个时钟对象,如下所示。
variable = Clock.schedule_interval(func, 1) # First Clock
variable = Clock.schedule_interval(func, 2) # Second Clock
这不会取消第一个时钟对象,并且两个时钟对象都保留。但是,当我尝试取消计划时。我只能取消最后安排的时间表。
例如,下面的代码只会取消安排“第二时钟”的时间。而且我无法取消预定时间或删除“第一钟”
variable.cancel()
variable.cancel() # Even if I cancel() twice, it works only once.
这是一个巨大的问题,因为发生这种情况时,由于时钟对象堆积在变量中,所以我的系统CPU占用了20%到90%的内存,因此我无法删除它们。
总而言之,我正在寻找一种方法来限制时钟对象仅一个一个地分配给一个变量。仅当我在具有单个核心低性能板的Linux嵌入式系统上加载kivy程序时,才会出现此问题。
答案 0 :(得分:0)
如果您一次只希望一个ClockEvent存在,那么只需在创建一个新的ClockEvent之前取消它即可:
def functionA(self):
if self.clock_variable is None:
self.clock_variable = Clock.schedule_interval(self._function, 1)
else:
self.clock_variable.cancel()
self.clock_variable = Clock.schedule_interval(self._function, 1)