【发布时间】:2016-09-26 13:29:57
【问题描述】:
如何使用 Core.schedule() 装饰器来安排任务在代理中的特定时间开始?我尝试使用 Core.schedule(deadline, *args, **kwargs) ,其中截止日期是日期和时间(即'2016-09-26 10:00:00'),但收到错误 args is not defined。
【问题讨论】:
标签: python-decorators volttron
如何使用 Core.schedule() 装饰器来安排任务在代理中的特定时间开始?我尝试使用 Core.schedule(deadline, *args, **kwargs) ,其中截止日期是日期和时间(即'2016-09-26 10:00:00'),但收到错误 args is not defined。
【问题讨论】:
标签: python-decorators volttron
通常调度方法不用作装饰器,因为调度回调只调用一次。 (我从来没有真正做过。)
*args 和 **kwargs 是传递给函数的变量参数的占位符。见http://www.saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-python/
在这种情况下,schedule 方法使用 *args 和 **kwargs 来存储传递给装饰器的任何额外参数,这些参数稍后会传递给被调用的函数。
例如,如果我有一个代理方法 update_state(self, parameter1) 并且我想安排它在未来某个时间运行,该时间由名为 update_time 的日期时间对象和参数 1 的值指定的值 42 我可以做:
self.core.schedule(update_time, self.update_state, 42)
update_time 需要是 python 日期时间对象或 unix 时间戳。
要将其用作装饰器,您可以执行以下操作:
Core.schedule(update_time, 42)
def update_state(self, parameter1):
pass
当 update_time 到达时,它将被调用一次。如果您想安排另一个对 update_state 函数的调用,您需要计算出新时间并从 update_state 函数安排它。
【讨论】: