Отключить функцию расписания в VOLTTRON

#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. Еще одна вещь… это также позволяет вам запускать событие в разных частях вашего кода, если вы хотите.