Flask-Socketio не генерирует выбросы в рабочем потокеPython

Программы на Python
Ответить
Anonymous
 Flask-Socketio не генерирует выбросы в рабочем потоке

Сообщение Anonymous »

У меня есть программа с очередью и рабочим потоком, который выполняет все, что находится в очереди. Когда поток завершает обработку задания, он должен выдать некоторые данные. Он говорит, что отправляет сообщение, но клиентская сторона не получает сообщение. Когда я испускаю что-то, используя конкретную команду some в конечной точке теста, это работает.

Код: Выделить всё

from flask import Flask, render_template, request, session
from flask_socketio import SocketIO, emit
from threading import Thread
from queue import Queue
import time

app = Flask(__name__)
socketio = SocketIO(app, engineio_logger=True, logger=True, cors_allowed_origins="*")
job_queue = Queue()

def worker():
while True:
sid, job = job_queue.get()
if job is None:
break

print(f"Processing {job}", flush=True)
time.sleep(2)

socketio.emit("response", {"filename": job}, to=sid)
print(f"Emitted response to {sid}", flush=True)

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

@app.route("/test", methods=["POST"])
def test():
sid = request.args.get('sid')
job_queue.put((sid, "test"))
socketio.emit("response", {"filename": "test"}, to=sid)
return "OK", 200

@socketio.on('connect', namespace='/')
def connected():
print("Connected", flush=True)

if __name__ == '__main__':
Thread(target=worker, daemon=True).start()
socketio.run(app, debug=True)
Я добавил sid в качестве параметра в команду, потому что клиентам предоставляется комната с их именем sid. Таким образом я могу обойти ошибку «socketio, выдающая выход за пределы области действия».
Я также пытался использовать socketio.start_background_task(), но это тоже не сработало .

Подробнее здесь: https://stackoverflow.com/questions/792 ... ker-thread
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»