我有一个简单的烧瓶应用程序,当没有请求传入时,我需要连续打印“没有传入请求”到特定路径。任何人都可以帮我解决一下
答案 0 :(得分:2)
你想要实现的有趣的事情:)。这是我放在一起的工作脚本。肯定有修改可以将它弯曲到你正在寻找的东西,但总体方案对我来说似乎很合理。
from flask import Flask
import threading
import time
app = Flask(__name__)
class Printer(object):
def __init__(self, time_to_sleep):
self.lock = threading.Lock()
self.tts = time_to_sleep
self.go_on = True
def do_print(self):
print "{}: no incoming requests".format(time.time())
def loop(self):
while self.go_on:
time.sleep(self.tts)
with self.lock:
self.do_print()
def exit(self):
self.go_on = False
printer = Printer(1)
def lock_acquire(func):
def __inner__(*args):
with printer.lock:
res = func(*args)
return res
return __inner__
@app.route('/')
@lock_acquire
def hello_world():
time.sleep(5)
return 'Hello, World!'
def run_app():
host = "localhost"
app.run(host=host, debug=1, use_reloader=False)
if __name__ == "__main__":
t = threading.Thread(target=printer.loop,
name="looper")
t.start()
run_app()
printer.exit()
所以你有一个线程定期获取一个锁并打印一条消息。路径api端点包含在首先获取此锁定(防止打印线程打印)的函数中,并在完成后释放它。另一个重要的事情是在循环中添加一个控制流变量(go_on),以便在退出时使用Ctrl-C保持线程不活动。否则脚本会挂起,因为该线程不是守护程序线程,因此会使进程保持活动状态。