스레드를 죽이는 적절한 방법

케빈

내가하려는 것 :

시작된 부모 프로세스에서 무한 루프가있는 스레드를 죽이려고합니다. 변수를 변경하자마자 자식 프로세스가 종료되기를 원합니다.

지금까지 내가 한 일 :

두 스레드와 변수를 공유했으며 루프가 중지 신호를 받으면 중지됩니다.

작동하지 않는 것 :

중지 신호를 보내 자마자 스레드를 죽이지 않습니다.

다음은 몇 가지 샘플 코드입니다.

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

여러 갈래 스레드를 만드는 적절한 방법

이 스레드를 죽이는 방법?

작업자 스레드를 종료하는 적절한 방법

다른 스레드에서 이미지를 읽는 적절한 방법

스레드를 해제하고 재사용하는 적절한 방법

PostgreSQL: '고아' 레코드를 삭제하는 적절한 방법

while (true)이있는 스레드를 죽이는 방법?

Qt / C ++에서 스레드를 안정적으로 죽이는 방법은 무엇입니까?

인덱스를 만드는 적절한 방법입니까?

UiWatcher ()의 적절한 Private 클래스를 만드는 방법

스레드를 죽이는 방법이 있습니까?

파이썬에서 타이머 스레드를 종료하는 적절한 방법은 무엇입니까?

프로세스를 죽이는 우아한 방법

예측 불가능한 서비스를 죽이는 방법

자바 스레드를 죽이는 방법?

실행중인 스레드를 죽이는 방법

asp.net 코어에서 스레드를 죽이는 방법

N 초 후에 스레드를 죽이는 방법?

Google 스프레드 시트에서 IMPORTXML에 대한 적절한 xpath를 찾는 방법-N / A 오류?

부모 스레드에서 자식 스레드를 죽이는 방법-C

장고 개발 서버를 죽이는 적절한 신호

다중 스레드로 SIGTERM을 처리하는 적절한 방법

스레드에서 종료 조건을 기다리는 적절한 방법

Go에서 LevelDB를 다중 스레드하는 적절한 방법은 무엇입니까?

거대한 페이지를 출시하는 적절한 방법?

Angular2 : 적절한 업그레이드 방법

도커의 사용한 포트를 죽이는 방법

Python : 무한 for 루프를 죽이는 방법?

WebService를 죽이지 않는 현명한 방법

TOP 리스트

뜨겁다태그

보관