繁体   English   中英

如何使用http打破烧瓶和python的无限循环?

[英]How to break out of an infinite loop with flask and python using http?

我想使用flask和http get摆脱无限循环。

from flask import Flask, render_template, jsonify
from serialtest import get_dist
app = Flask(__name__)

def test():
    while True:
        print('keep going!')

@app.route('/start')
def start():
    return test()

@app.route('/stop')
def stop():
    # stop the function test
    return 'stopped'

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000, debug=True, threaded=True)

我想将Flask用作http服务器,并提供一个Web客户端,该客户端可以通过click事件和http get启动test(),然后通过其他click事件停止test()。

对于这种特殊情况,您可以生成一个处理长时间运行任务的线程。

import threading
import time
from flask import Flask, render_template, jsonify
from serialtest import get_dist
app = Flask(__name__)

light_on = False

@app.before_first_request
def light_thread():
    def run():
        global light_on
        while light_on:
            print("keep going!")
            time.sleep(1)

    thread = threading.Thread(target=run)
    thread.start()

@app.route('/start')
def start():
    # stop the function test
    light_on = True
    return "started"

@app.route('/stop')
def stop():
    light_on = False
    return 'stopped'

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000, debug=True, threaded=True)

只要服务器本身正在运行,线程就一直运行,并在使用before_first_request装饰器向服务器发出任何HTTP请求之前启动了该线程。 它检查全局变量中的开/关状态。 我不建议在所有情况下都使用此方法,特别是使用全局变量保存状态,但这应该可以完成您描述的用例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM