У меня есть программа с очередью и рабочим потоком, который выполняет все, что находится в очереди. Когда поток завершает обработку задания, он должен выдать некоторые данные. Он говорит, что отправляет сообщение, но клиентская сторона не получает сообщение. Когда я испускаю что-то, используя конкретную команду 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(), но это тоже не сработало .
У меня есть программа с очередью и рабочим потоком, который выполняет все, что находится в очереди. Когда поток завершает обработку задания, он должен выдать некоторые данные. Он говорит, что отправляет сообщение, но клиентская сторона не получает сообщение. Когда я испускаю что-то, используя конкретную команду some в конечной точке теста, это работает. [code]from flask import Flask, render_template, request, session from flask_socketio import SocketIO, emit from threading import Thread from queue import Queue import time
if __name__ == '__main__': Thread(target=worker, daemon=True).start() socketio.run(app, debug=True) [/code] Я добавил sid в качестве параметра в команду, потому что клиентам предоставляется комната с их именем sid. Таким образом я могу обойти ошибку «socketio, выдающая выход за пределы области действия». Я также пытался использовать socketio.start_background_task(), но это тоже не сработало .