Мой вопрос похож на этот вопрос , мой сервер выполняет тяжелую работу, и я надеюсь, что 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 не помогают, прогресс после присоединения к ним будет отображаться только тогда, когда код останавливается.