Многопоточный процесс Python не завершится - PullRequest
0 голосов
/ 22 марта 2019

В настоящее время у меня есть сервер Flask, работающий с SocketIO, и я хочу, чтобы функция python постоянно работала до получения сообщения Socket, после чего я хочу остановить первую функцию и запустить вторую.

Я пробовал несколько способов сделать это, но самый близкий, который я дошел до сих пор, это использование многопроцессорной обработки. Я могу нормально создать / запустить процесс и оставить его работающим, но когда я пытаюсь завершить процесс, когда приходит сообщение, ничего не происходит - функция продолжает работать.

Основная идея заключается в том, что он должен печатать «висит ...», пока не получит сообщение SocketIO, в какой момент «зависание ...» прекратится и будет вызвана новая функция. Вся помощь приветствуется.

from flask import Flask, render_template
from flask_socketio import SocketIO, send
import time
import multiprocessing

app = Flask(__name__)
app.config['SECRET_KEY'] = 'mysecret'
socketio = SocketIO(app)

def hang():
    while True:
        print('hanging..')
        time.sleep(1)

def nextFunction():
    # something here
    print('in function 2')


@socketio.on('message')
def handleMessage(msg):
    if msg == 'enroll':
        # Kill old process
        global hangProcess
        hangProcess.terminate()
        hangProcess.join()

        # Start next process
        enrollProcess = multiprocessing.Process(target=nextFunction)
        enrollProcess.start()


hangProcess = multiprocessing.Process(target=hang)
hangProcess.start()


if __name__ == '__main__':
    socketio.run(app, debug=True, host='0.0.0.0')
...