我有一个Web服务器,可以在调用时创建一个文件。我想在某个地方添加一个函数,运行得很简单,它会检查这个文件并对其内容进行操作,但我不知道将它放在代码中的哪个位置。 Web服务器的代码:
import bottle
import pickle
import time
class WebServer(object):
def __init__(self):
bottle.route("/", 'GET', self.root)
bottle.run(host='0.0.0.0', debug=True)
def root(self):
with open("watchdog.txt", "wb") as f:
pickle.dump(time.time(), f)
if __name__ == "__main__":
WebServer()
我想与网络服务器一起运行的功能:
def check():
with open("watchdog.txt", "rb") as f:
t1 = pickle.load(f)
t2 = time.time()
if t2 - t1 > 10:
print("stale watchdog")
对WebServer()
的调用将程序置于循环中(这是正常的,Web服务器正在侦听)所以我想将check()
放在可以与回调结合的地方(类似)到Tkinter的self.root.after()
。如何最好地做到这一点?
注意:为简单起见,我在上面的代码中省略了错误检查,导致缺少watchdog.txt
等等。
答案 0 :(得分:0)
我最终找到的一个解决方案是使用Event Scheduler:
import bottle
import pickle
import time
import threading
class WebServer(object):
def __init__(self):
bottle.route("/", 'GET', self.root)
bottle.run(host='0.0.0.0', debug=True)
def root(self):
with open("watchdog.txt", "wb") as f:
pickle.dump(time.time(), f)
def check():
try:
with open("watchdog.txt", "rb") as f:
t1 = pickle.load(f)
except IOError:
pass
else:
t2 = time.time()
if t2 - t1 > 10:
print("stale watchdog")
else:
print("fresh watchdog")
finally:
threading.Timer(10, check).start()
if __name__ == "__main__":
check()
WebServer()