#python #flask #socket.io #flask-socketio
#python #flask #socket.io #flask-socketio
Вопрос:
Каждый раз, когда я обновляю страницу со стороны клиента, устанавливается новое соединение с сервером flask, и он запускает функцию ‘backgroundFunction ()’ без выхода из недавно открытой функции, и их число увеличивается по мере обновления страницы снова и снова.
from flask import Flask
from flask_socketio import SocketIO, send, emit
import socket
from time import sleep
import datetime
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
app.config['DEBUG'] = True
socketio = SocketIO(app , cors_allowed_origins="*" , async_mode = None , logger = False , engineio_logger = False)
def backgroundFunction():
while True:
data = "I am Data"
socketio.emit('data', data, broadcast=True)
socketio.sleep(2)
@socketio.on('connect')
def socketcon():
print('Client connected')
socketio.start_background_task(backgroundFunction)
if __name__ == ("__main__"):
socketio.run(app, port=5009)
Ответ №1:
Посмотрите на пример кода в репозитории Flask-SocketIO, чтобы узнать один из возможных способов реализации фонового задания, которое запускается при первом запуске события.
Код здесь. Вот соответствующий отрывок:
thread = None
thread_lock = Lock()
def background_thread():
"""Example of how to send server generated events to clients."""
count = 0
while True:
socketio.sleep(10)
count = 1
socketio.emit('my_response',
{'data': 'Server generated event', 'count': count})
@socketio.event
def connect():
global thread
with thread_lock:
if thread is None:
thread = socketio.start_background_task(background_thread)