gpt4 book ai didi

python - 使用 gunicorn 服务时 flask 超时

转载 作者:行者123 更新时间:2023-12-05 02:56:53 29 4
gpt4 key购买 nike

我有一个应用程序可以将音频文件转换为文本。使用 flask 和 flask-socketio。当我使用“python run.py”运行它时,它工作得很好,但是当我使用“gunicorn -k eventlet -b 0.0.0.0:5000 run:app”运行它时,它会在调用 google 的部分停止语音到 audio.py 文件中的文本 api。

这些是当前的代码。

运行.py:

from ats import socketio, app, db

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

初始化.py

import logging, json

from flask import Flask, jsonify, render_template, request
from flask_socketio import SocketIO, emit, send
from flask_cors import CORS
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmall

app = Flask(__name__, instance_relative_config=True, static_folder="templates/static", template_folder="templates")

# Create db instance
db = SQLAlchemy(app)
ma = Marshmallow(app)

@app.route('/')
def index():
return render_template('index.html');

# import models
from ats import models

# set up CORS
CORS(app)
socketio = SocketIO(app, cors_allowed_origins='*', async_mode='eventlet')


# import blueprints
from ats.product.product import product_blueprint

# register blueprints
app.register_blueprint(product_blueprint, url_prefix='/api/product')

from ats import error_handlers

产品.py

import os
import math
import eventlet
from os.path import join
from flask import Blueprint, request, jsonify, abort
from ats.utils import audio as AUDIO

product_blueprint = Blueprint('product', __name__)

@product_blueprint.route('/add', methods=['post'])
def addProduct():
try:
data = request.form

foldername = data['name']
scriptFile = request.files['script']
audioFile = request.files['audio']

# save the script and audio file to uploads folder
FILE.createFolder(foldername)
FILE.save(foldername, scriptFile)
FILE.save(foldername, audioFile)

# list the files in the uploads
audioFiles = FILE.getAudioFileList(foldername)

fileCount = len(audioFiles)
currentFile = 1
# ============ speech to text =============
for file in audioFiles:
recognizedText = AUDIO.convert(foldername, file)

# save to database
newAudio = {
'name': file,
'recognizedText': recognizedText,
'length': duration,
}
Audio.add(newAudio)

# emit event to update the client about the progress
percent = math.floor((currentFile / float(fileCount) ) * 100)
emit('upload_progress', {'data': percent}, room=data['sid'], namespace='/')
eventlet.sleep()
currentFile += 1

# Delete the files in uploads folder
FILE.delete(foldername)

return jsonify({'data': None, 'message': 'Product was added.', 'success': True}), 200
except Exception as e:
abort(500, str(e))

音频.py

import os
from ats import app

# Imports the Google Cloud client library
from google.cloud import speech
from google.cloud.speech import enums
from google.cloud.speech import types

# Instantiates a client
client = speech.SpeechClient()

def convert(foldername, filename):
try:

file = os.path.join(app.config['UPLOAD_FOLDER'], foldername, filename)

# Loads the audio into memory
with io.open(file, 'rb') as audio_file:
content = audio_file.read()
audio = types.RecognitionAudio(content=content)

config = types.RecognitionConfig(
encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16,
sample_rate_hertz=48000,
language_code='ja-JP')

# Call speech in the audio file
response = client.recognize(config, audio) # The code will stop here, that results to worker timeout in gunicorn

return response
except Exception as e:
raise e

我已经搜索了将近一周的解决方案,但仍然找不到。谢谢你们的帮助。

最佳答案

当您直接使用 python run.py 运行您的应用程序时没有应用超时,应用程序需要花费任何时间来处理,但是当您使用 Gunicorn 运行应用程序时,默认超时为 30 秒,这意味着如果您的应用程序在 30 秒内没有响应,您将收到超时错误。为避免这种情况,您可以通过添加 --timeout <timeinterval-in-seconds> 来增加 Gunicorn 设置的默认超时时间。

以下命令将超时设置为 10 分钟

gunicorn -k eventlet -b 0.0.0.0:5000 --timeout 600 run:app

关于python - 使用 gunicorn 服务时 flask 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60035871/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com