如何取消"开始"请求使用"停止"请求烧瓶?

时间:2016-03-09 22:54:35

标签: python flask

点击"开始&#34>在Web UI上的按钮,程序计划使用threading.Timer()以0.01s频率在5000步内处理数据。提供“停止”按钮以随时停止processing_data()并返回在此期间计算的结果的一部分。

step = 0
result = {}
thread = None

@app.route('/start', methods=['GET'])
def start():
    processing_data()
    time.sleep(5000*0.01) # wait for the processing_data() finished
    return Response(result, mimetype='application/json')

def processing_data():
    result = {json : format} # compute the json format result
    if step != 5000:
        global step
        step +=1
        global thread
        thread = threading.Timer(0.01, processing_data)
        thread.start()

@app.route('/stop', methods=['GET'])
def stop():
    thread.cancel()
    return "stopped"

它不起作用,似乎stop()只会在start()完成后运行。所以我的问题是如何在处理过程中取消start()请求?假设用户不耐烦,谁只是想在某些步骤后获得计算结果的一部分?

编辑: 我试图进一步简化程序,删除线程,添加Flask的应用程序上下文。它完全相同,这意味着线程不是问题,请求或sleep()根本不会被中断。

step = 0
result = {}

@app.route('/start', methods=['GET'])
def start():
    g.__stop = False
    processing_data()
    time.sleep(5000*0.01) # wait for the processing_data() finished
    return Response(result, mimetype='application/json')

def processing_data():
    result = {json : format} # compute the json format result
    if step != 5000 and not g.__stop:
        global step
        step +=1
        processing_data()

@app.route('/stop', methods=['GET'])
def stop():
    g.__stop = True
    return "stopped"

0 个答案:

没有答案