点击"开始&#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"