Мне нужно тренировать модель. Время в зависимости от размера данных, оно может узнать более 10 минут. Я решил провести обучение модели через веб-сокет, чтобы проверить некоторые статусы. Все работало хорошо, когда она учится минуту или две, но когда она учится больше, возникают другие проблемы. Я понимаю, что сокет пингует сервер, и поэтому основной поток должен работать. На моем компьютере это работает хорошо, но с другой стороны, поведение совершенно отличается от того, что я хочу. Другие пользователи должны отправить сообщение, в котором говорится, что модель уже изучена
Как должны работать потоки в моей ситуации? и еще вопрос, кто должен закрывать сокет после окончания задачи? сервер или клиент
У меня есть такая реализация:
thread = None
thread_lock = Lock()
@socketio.on('train')
def train_model(params):
global thread
if thread is None:
with thread_lock:
_send_status({'status': 'Start model training'})
thread = Thread(target, args=args, daemon=False)
thread.start()
while learning_model_thread.is_alive():
socketio.sleep(15) # for the ability to ping from client to server
thread_result = thread.join()
thread = None
else:
_send_status({'status': 'Model is already learning'})
while learning_model_thread.is_alive:
socketio.sleep(15)
_send_status({'status': 'end'})
def _send_status(data):
socketio.emit('response', data, json=True')
socketio.sleep(0)
У меня иногда такое поведение, что когда он посылает команду end, он начинает переучивать модель. Что я сделал не так с потоками?