Если вы хотите изменить периодику, вы должны настроить ее, используя вызов self.core.periodic.
self.core.periodic возвращает ссылку на зелень, которая работает с периодическим методом. Вызовите метод kill, чтобы остановить гриль, прежде чем вы начнете новый. Вы хотите настроить периодический метод 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)