Как передать событие в socketio внутри al oop in python? - PullRequest
0 голосов
/ 27 января 2020

У меня есть приложение, которое преобразует аудиофайл в текст, используя google voice to text api, затем загружает файл в aws s3 и, наконец, сохраняет ссылку и распознанный текст в базу данных.

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

Im используя: Flask -socketio python v3.8

Это точка входа в приложение:

from ats import socketio, app, db

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

Это фрагмент кода l oop:

for file in audioFiles:

    # Convert file to text
    recognizedText = AUDIO.convert(file)

    # Upload file to aws s3
    bucket = app.config['BUCKET']
    location = app.config['UPLOAD_FOLDER']

    filePath = join(location, foldername, file)
    url = S3.upload_file(filePath, bucket)

    # Save the audiofile to database
    newAudio = {
        'productId': productId,
        'name': file,
        'link': url,
        'recognizedText': recognizedText,
    }
    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=sid, namespace='/') # This emit will not reach the client side until the loop is done.
    currentFile += 1

И большую часть времени сокет будет отключаться до того, как будет завершен весь процесс. Любые предложения или исправить это, ребята? Я был бы очень полезен, поскольку я начинаю учиться разрабатывать apis с Flask.

...