У меня есть программа, которая довольно часто распределяет и перепланирует часы. Потом я иногда находил стеки объектов часов, не будучи незапланированными.
Вот пример того, что происходит.
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.
Это огромная проблема, потому что процессор моей системы загружается на 20-90%, когда это происходит, поскольку объект часов помещается в переменную, и у меня нет возможности их удалить.
В заключение, я ищу способ ограничить объект часов, который будет присваиваться переменной только один за другим. Эта проблема возникала только тогда, когда я загружал программу kivy во встроенную систему Linux (с одноядерной низкоэффективной платой).