Как вырваться из бесконечного цикла с колбой и питоном, используя http? - PullRequest
0 голосов
/ 17 сентября 2018

Я бы хотел вырваться из бесконечного цикла, используя колбу и 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-сервера и обслуживать веб-клиент, который может запустить test () с событием click и http get, а затем остановить test () с другим событием click.

1 Ответ

0 голосов
/ 17 сентября 2018

В этом конкретном случае вы можете создать поток, который обрабатывает долгосрочную задачу.т. е.

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)

Поток работает до тех пор, пока работает сам сервер, и запускается до того, как к серверу поступит любой HTTP-запрос с использованием декоратора before_first_request.Он проверяет состояние включения / выключения в глобальной переменной.Я бы не рекомендовал это, в частности использовать глобальную переменную для сохранения состояния, для всех сценариев, но это должно выполнить описанный вами вариант использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...