Возникает невероятный вопрос. Я хочу использовать многопроцессный python, чтобы эффективно начать какую-то работу! Но I когда я что-то делаю в методе post flask, возникает проблема: многопроцессный процесс не работает, пока Я нажимаю Ctrl + c, чтобы выйти из процесса!
Это flask index.py
from flask import Flask, request
from flask_cors import *
import component.recognize.recognize as voice
import json
from multiprocessing import Process
import os
app = Flask(__name__)
CORS(app, resources={r"/api/*": {
"origins": "*",
"methods": "POST",
"allow_headers": "*"
}})
@app.route('/api/getRecognizeSongResult', methods={'POST'})
def get_voice_file():
if request.method == "POST":
some_file_list = os.listdir('../')
npy_file_list = []
process_list = []
result_list = []
for i in some_file_list:
if i.endswith(".npy") and i.startswith("database"):
npy_file_list.append(i)
filename = request.form.get("id")
path = "upload/media/audio/" + filename + ".wav"
f = open(path, "wb")
f.write(request.files['file'].read())
f.close()
rec = voice.voice()
p1 = Process(target=rec.recognize, args=(path, os.path.join("../", npy_file_list[2])))
p2 = Process(target=rec.recognize, args=(path, os.path.join("../", npy_file_list[1])))
p1.start()
p2.start()
p1.join()
p2.join()
print(result_list)
return json.dumps(result_list)
else:
return "ILLEGAL METHOD"
app.config.update(
DEBUG=False
)
app.run()
Это распознавание.py
# -*- coding: utf-8 -*-
from dtw import dtw
from numpy.linalg import norm
from numpy import array
import numpy as np
import librosa
from multiprocessing import Process
import os
class voice:
def recognize(self, wav_path, beat_database_path=None):
print(beat_database_path)
data = np.load(beat_database_path, allow_pickle=True)
beat_database = data.item()
if wav_path.endswith(".wav"):
y, sr = librosa.load(wav_path)
tempo, beats = librosa.beat.beat_track(y=y, sr=sr)
beats = librosa.feature.delta(beats)
x = array(beats).reshape(-1, 1)
result = {}
for song in beat_database.keys():
y = beat_database[song]
y = array(y).reshape(-1, 1)
dist, cost, acc, path = dtw(x, y, dist=lambda x, y: norm(x - y, ord=1))
print('distance ', song.split("\\")[1], ": ", dist)
result[song] = dist
matched = min(result, key=result.get)
print("================================================")
print("Playing song is ", matched.split("\\")[1].split(".wav")[0])
return {
"name": matched.split("\\")[1].split(".wav")[0].split("-")[0].strip(),
"singer": matched.split("\\")[1].split(".wav")[0].split("-")[1].strip(),
"distance": dist
}
else:
print(IOError)
Многопроцессный режим не работает Когда Flask получает пост-запрос, пока я не нажму ctrl + c, чтобы остановить сервер! Я не так, как это сделал!