#schedule #volttron
#Расписание #volttron
Вопрос:
Для периодического выполнения функции используется следующая команда.
self.core.schedule(periodic(t), periodic_function)
Я хотел бы отключить вышеуказанную функцию при выполнении определенных условий. Кто-нибудь знает как?
Комментарии:
1. Я думаю, что самый простой способ сделать это — в самой periodic_function. Предполагая, что это в самом классе agent, у вас может быть логическое значение уровня класса относительно того, следует ли продолжить или просто вернуться из самой функции.
2. Предполагается, что эта функция будет отменена и больше никогда не появится?
3. @Craig Вы рекомендуете использовать циклы типа «for» или «while»? И я хочу создать или удалить периодическое действие функции в соответствии с условием.
Ответ №1:
@GYOON
Я бы сделал то, что делает приведенный здесь код: https://github.com/VOLTTRON/volttron/blob/master/services/core/VolttronCentralPlatform/vcplatform/agent.py#L320
В основном то, что происходит, заключается в том, что в методе агента onstart / onconfig функция, которая должна быть выполнена, вызывается в появившемся позже зеленом окне
class MyAgent(Agent):
def __init__(self, **kwargs):
self._periodic_event = None
self.enabled = True
@Core.receiver('onstart')
def onstart(self, sender, **kwargs):
self.core.spawn_later(1, self._my_periodic_event)
def _my_periodic_event(self):
if self._periodic_event is not None:
self._periodic_event.cancel()
# do stuff here within this event loop
if self.enabled:
# note this is an internal volttron function see the referenced link for
# import
now = get_aware_utc_now()
next_update_time = now datetime.timedelta(seconds=20)
self._periodic_event = self.core.schedule(next_update_time, self._my_periodic_event)
Хорошая вещь в этом заключается в том, что она позволяет вам полностью контролировать процесс планирования. Включение, отключение, когда запускать и т.д. При необходимости вы можете изменить количество секунд с помощью переменных-членов.
Еще раз извините за поздний ответ на это, но, надеюсь, это поможет!
Комментарии:
1. Еще одна вещь… это также позволяет вам запускать событие в разных частях вашего кода, если вы хотите.