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.
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.
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]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] 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.
Ich möchte meinen Raspberry Pi 5-Anschluss an einen Python-Socketio-Client anschließen, um meinen Flask-Socketio-Server auf einem anderen Gerät zu verbinden. Ich verwende einen Nginx als WebSocket...
Ich habe bereits versucht, verschiedene Methoden mit asynchronen Funktionen und Planungsaufgaben sowie Ereignisschleifen zu verwenden. Ich weiß nicht, was ich tun soll. Der folgende Code ist der...
Ich erstelle eine PYQT6 -Anwendung, die eine Sequenz im Hintergrund ausführen kann. Die Sequenz ist eine Unterklasse von QObject mit einer Run () -Methode, die von einem QThread aufgerufen wird. Hier...
Jedes Mal, wenn ich eine Post-Anfrage an /tts/say oder eine andere Post-Anfrage sende, stoppt die Hintergrundaufgabe. Warum ist das so und vor allem: Wie kann ich dieses Verhalten stoppen? Ich konnte...
PFusionspassger muss den Webserver mit einer eigenen Funktion starten. Daher kann eine benutzerdefinierte Funktion zum Starten eines Webservers verwendet werden, während Socketio für die Verwendung...