Flask -SocketIO отправка сообщений в потоках всегда зависит от задач, выполняемых на сервере - PullRequest
0 голосов
/ 02 апреля 2020

Мой вопрос похож на этот вопрос , мой сервер выполняет тяжелую работу, и я надеюсь, что websocket может помочь серверу показать ход этой работы на веб-странице. Поэтому я думаю, что многопоточность необходима.

В чем моя проблема?

Веб-страница может отображать ход работы в обычном режиме, но она не отображается мгновенно. Например, моя работа работает со скоростью 10% в секунду. Его отображение может составлять 10% в первую секунду и 10% до шестой секунды, до 60% будет отображаться в шестой секунде. В моей отладке проблема заключается в «отображении». Так называемое отображение здесь - это значение, отправляемое через websocket, полученное с помощью JavaScript, а сообщение websocket, отправляемое с помощью python, является мгновенным. Итак, моя проблема в том, почему JavaScript не получает мгновенных сообщений веб-сокета? Повлияет ли на запущенную на сервере задачу?

from flask import Flask
from flask_socketio import SocketIO
import threading

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socket_io = SocketIO(async_mode="threading")
socket_io.init_app(app)

@socket_io.on('start')
def start():
    thread = threading.Thread(target=some_buzy_work)
    thread.start()

# function will called in some_buzy_work, send progress to JavaScript
def send_progress(progress):
    socket_io.emit('progress', progress)

if __name__ == '__main__':
    socket_io.run(app, host='0.0.0.0')

Кстати, ни eventlet , ни gevent не помогают, прогресс после присоединения к ним будет отображаться только тогда, когда код останавливается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...