如何运行瓶子和并发功能?

时间:2014-06-28 13:52:52

标签: python bottle

我有一个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等等。

1 个答案:

答案 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()