【发布时间】:2018-03-03 23:10:30
【问题描述】:
我想做的事:
我正在尝试从启动的父进程中终止一个具有无限循环的线程。我希望在更改变量后立即终止子进程。
到目前为止我做了什么:
我已经与两个线程共享了一个变量,一旦循环得到停止信号,它就会停止。
什么不起作用:
我一发送停止信号就不会杀死线程
这里是一些示例代码:
from flask import Flask, flash, redirect, render_template, request, session, abort
import light_control
import logging
import thread
app = Flask(__name__)
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)
global stop
stop = False
def loop_rainbow_cycle_successive(name):
global stop
while 1:
if stop == True:
break
light_control.rainbow_cycle_successive()
def loop_rainbow_cycle(name):
global stop
while 1:
if stop == True:
break
light_control.rainbow_cycle()
def loop_rainbow_colors(name):
global stop
while 1:
if stop == True:
break
light_control.rainbow_colors()
RGB = ()
@app.route("/")
def index():
return render_template(
'index.html')
@app.route("/getColor/", methods=['POST'])
def getColor():
RGB = (request.form['r'],request.form['g'],request.form['b'])
light_control.setColor(RGB)
return render_template('index.html')
@app.route("/useFunction/", methods=['POST'])
def useFunction():
global stop
stop = False
func = request.form['function']
if func == "rainbow_cycle_successive":
thread.start_new_thread( loop_rainbow_cycle_successive, ("loop_rainbow_cycle_successive", ))
elif func == "rainbow_cycle":
thread.start_new_thread( loop_rainbow_cycle, ("loop_rainbow_cycle", ))
elif func == "rainbow_colors":
thread.start_new_thread( loop_rainbow_colors, ("loop_rainbow_cycle", ))
elif func == "STOP":
stop = True
return render_template('index.html')
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8080)
【问题讨论】:
-
您正在交替使用 thread 和 process 这两个词。那是错的。如果你真的不得不杀死一个进程,有办法杀死一个进程,但你永远不应该杀死一个线程。另外,我没有在您的代码中看到您正在杀死他们中的任何一个。
-
@zvone 谢谢。你是对的。我找到了我的问题的解决方案。我将使用 p.terminate。
标签: python multithreading