Kivy Clock не планируют и перепланируют вопрос - PullRequest
0 голосов
/ 25 января 2019

У меня есть программа, которая довольно часто распределяет и перепланирует часы. Потом я иногда находил стеки объектов часов, не будучи незапланированными.

Вот пример того, что происходит.

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 (с одноядерной низкоэффективной платой).

1 Ответ

0 голосов
/ 01 февраля 2019

Если вы хотите, чтобы одновременно существовал только один 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...