Flask-socketio, das nicht im Arbeiter-Thread ausgingPython

Python-Programme
Anonymous
 Flask-socketio, das nicht im Arbeiter-Thread ausging

Post by Anonymous »

Ich habe ein Programm mit einer Warteschlange und einem Worker -Thread, der alles in der Warteschlange ausführt. Wenn der Thread fertig ist, sollte er einige Daten ausgeben. Es heißt, es wird ausstrahlt, aber die Client -Seite erhält die Nachricht nicht. Wenn ich im Testendpunkt etwas mit dem gleichen Befehl emittiere, funktioniert es.

Code: Select all

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)
Ich habe dem Emit den SID als Parameter hinzugefügt, da Clients einen Raum mit ihrem SID -Namen erhalten. So kann ich die Socketio -Emission aus Geltungsbereich Fehler überwinden. Ich funktioniert entweder.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post