动态更改@Core.periodic 方法的重复时间
Dynamically change a @Core.periodic method's repeat time
假设我有一个方法 X,其 Core.periodic 装饰器最初设置为 60 秒,有没有办法将方法 X 的重复时间更改为另一个方法(称为 Y)的 45 秒而代理人是 运行?
class SomeAgent(Agent)
...
@Core.periodic(settings.HEARTBEAT_PERIOD)
method X():
#Do stuff
method Y():
#Change method X's repeat time
如果您想更改周期性的,您必须调用 self.core.periodic 来设置它。
self.core.periodic returns 对 greenlet 的引用,它是 运行 周期性方法。在开始新的之前调用 kill 方法来停止 greenlet。您需要在 onsetup 方法中设置周期。除非你的周期性函数使用消息总线,在这种情况下你会想要在其中放入一个 onstart 方法。
class SomeAgent(Agent):
def __init__(self, **kwargs):
super(SomeAgent, self).__init__(**kwargs)
self.periodic_greenlet = None
@Core.receiver('onstart')
def onstart(self, sender, **kwargs):
self.periodic_greenlet = self.core.periodic(settings.HEARTBEAT_PERIOD, self.X)
def X(self):
#Do stuff
def Y(self, new_period):
#Checking for None may seem superfluous, but there are some possible race
#conditions at startup that cannot be completely eliminated.
if self.periodic_greenlet is not None:
self.periodic_greenlet.kill()
self.periodic_greenlet = self.core.periodic(new_period, self.X)
假设我有一个方法 X,其 Core.periodic 装饰器最初设置为 60 秒,有没有办法将方法 X 的重复时间更改为另一个方法(称为 Y)的 45 秒而代理人是 运行?
class SomeAgent(Agent)
...
@Core.periodic(settings.HEARTBEAT_PERIOD)
method X():
#Do stuff
method Y():
#Change method X's repeat time
如果您想更改周期性的,您必须调用 self.core.periodic 来设置它。
self.core.periodic returns 对 greenlet 的引用,它是 运行 周期性方法。在开始新的之前调用 kill 方法来停止 greenlet。您需要在 onsetup 方法中设置周期。除非你的周期性函数使用消息总线,在这种情况下你会想要在其中放入一个 onstart 方法。
class SomeAgent(Agent):
def __init__(self, **kwargs):
super(SomeAgent, self).__init__(**kwargs)
self.periodic_greenlet = None
@Core.receiver('onstart')
def onstart(self, sender, **kwargs):
self.periodic_greenlet = self.core.periodic(settings.HEARTBEAT_PERIOD, self.X)
def X(self):
#Do stuff
def Y(self, new_period):
#Checking for None may seem superfluous, but there are some possible race
#conditions at startup that cannot be completely eliminated.
if self.periodic_greenlet is not None:
self.periodic_greenlet.kill()
self.periodic_greenlet = self.core.periodic(new_period, self.X)