2016-09-26 11 views
0

Как использовать декоратор Core.schedule(), чтобы запланировать запуск задачи в определенное время внутри агента? Я пробовал использовать Core.schedule (крайний срок, * args, ** kwargs), где крайним сроком является дата и время (т. Е. '2016-09-26 10:00:00'), но полученные аргументы об ошибках не определены.Декоратор Core.schedule в VOLTTRON

ответ

0

Обычно метод расписания не используется в качестве декоратора, поскольку запланированный обратный вызов вызывается только один раз. (Я никогда не делал этого.)

* args и ** kwargs являются держателями места для переменных аргументов, которые передаются функции. См. http://www.saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-python/

В этом случае метод расписания использует * args и ** kwargs для хранения любых дополнительных аргументов, переданных в декоратор, которые затем передаются в вызываемую функцию позже.

Например, если у меня есть агент-метод update_state (self, parameter1), и я хочу запланировать его запуск в будущем, указанный объектом datetime с именем update_time, а значение 42 для значения параметра1 я мог бы do:

self.core.schedule(update_time, self.update_state, 42) 

update_time должен быть объектом datetime python или отметкой времени unix.

Чтобы использовать его в качестве декоратора вы могли бы сделать что-то вроде этого:

Core.schedule(update_time, 42) 
def update_state(self, parameter1): 
    pass 

Когда update_time прибывает будет называться раз. Если вы хотите запланировать еще один вызов функции update_state, вам нужно будет выяснить новое время и запланировать его из функции update_state.