Kivy Clock计划外和重新计划问题

时间:2019-01-25 09:07:48

标签: python kivy

我有一个程序,经常将时钟取消计划和重新计划。然后我发现有时时钟对象堆栈没有被调度。

这是发生的情况的一个例子。

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程序时,才会出现此问题。

1 个答案:

答案 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)