내가하려는 것 :
시작된 부모 프로세스에서 무한 루프가있는 스레드를 죽이려고합니다. 변수를 변경하자마자 자식 프로세스가 종료되기를 원합니다.
지금까지 내가 한 일 :
두 스레드와 변수를 공유했으며 루프가 중지 신호를 받으면 중지됩니다.
작동하지 않는 것 :
중지 신호를 보내 자마자 스레드를 죽이지 않습니다.
다음은 몇 가지 샘플 코드입니다.
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)
프로세스로 만들고 p.terminate ()를 사용할 수 있습니다.
암호:
from flask import Flask, flash, redirect, render_template, request, session, abort
import sys, os
sys.path.append(os.getcwd() + '/audio-reactive-led-strip/python/')#append entire directory
import logging
import multiprocessing
import light_control, visualization
app = Flask(__name__)
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)
global stop
stop = False
p = multiprocessing.Process()
def terminate_process():
global p
if p.is_alive():
p.terminate()
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()
def loop_visualization(name):
# Initialize LEDs
visualization.led.update()
# Start listening to live audio stream
visualization.microphone.start_stream(visualization.microphone_update)
RGB = ()
@app.route("/")
def index():
return render_template(
'index.html')
@app.route("/getColor/", methods=['POST'])
def getColor():
terminate_process()
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
global p
stop = False
func = request.form['function']
if func == "rainbow_cycle_successive":
terminate_process()
p = multiprocessing.Process(target=loop_rainbow_cycle_successive, args=("loop_rainbow_cycle_successive", ))
p.start()
elif func == "rainbow_cycle":
terminate_process()
p = multiprocessing.Process(target=loop_rainbow_cycle, args=("loop_rainbow_cycle", ))
p.start()
elif func == "rainbow_colors":
terminate_process()
p = multiprocessing.Process(target=loop_rainbow_colors, args=("loop_rainbow_cycle", ))
p.start()
elif func == "visualization":
terminate_process()
p = multiprocessing.Process(target=loop_visualization, args=("loop_visualization", ))
p.start()
elif func == "STOP":
stop = True
terminate_process()
return render_template('index.html')
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8080)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다