如何确保Python中回调函数的及时性?
我有一个回调函数,但偶尔发出回调的委托需要几秒钟来提供更新(因为它正在通过远程连接等待数据)。对于我的用例来说,这很麻烦,因为我需要定期运行函数,或者退出程序。在python中有一个运行函数的计时器,或者如果在特定的时间间隔内(比如5秒钟)没有从委托获得更新,那么退出应用程序的最简单方法是什么如何确保Python中回调函数的及时性?,python,Python,我有一个回调函数,但偶尔发出回调的委托需要几秒钟来提供更新(因为它正在通过远程连接等待数据)。对于我的用例来说,这很麻烦,因为我需要定期运行函数,或者退出程序。在python中有一个运行函数的计时器,或者如果在特定的时间间隔内(比如5秒钟)没有从委托获得更新,那么退出应用程序的最简单方法是什么 def parseMessage(client, userdata, message): # CALLBACK FUNCTION THAT LISTENS FOR NEW MESSAGES si
def parseMessage(client, userdata, message): # CALLBACK FUNCTION THAT LISTENS FOR NEW MESSAGES
signal = int(str(message.payload.decode("utf-8")))
writeToSerial(signal)
def exceptionState(): # THIS IS THE FUNCTION I WOULD LIKE TO RUN IF THERE'S NO CALLBACK
print("ERROR, LINK IS DOWN, DISABLING SERVER")
exit()
def mqttSignal():
client.on_message = parseMessage # THIS INVOKES THE CALLBACK FUNCTION
client.loop_forever()
这听起来像是一个很好的场景,用于设置一个后台线程,如果您没有获得基于sentinel值的事件,该线程将退出。一个简单的实现可能如下所示:
from datetime import datetime, timedelta
from threading import Thread
from time import sleep
class Watcher:
timeout = timedelta(minutes=5)
def __init__(self):
self.last_signal = datetime.now()
Thread(target=self.exception_state).start()
def parse_message(self):
self.last_signal = datetime.now()
# Other handling code here
def exception_state(self):
while True:
if datetime.now() - self.last_signal > self.timeout:
exit("No signal received.")
sleep(5)
可能相关: