Как работает с потоками и веб-сокетами? - PullRequest
0 голосов
/ 20 апреля 2020

Мне нужно тренировать модель. Время в зависимости от размера данных, оно может узнать более 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, он начинает переучивать модель. Что я сделал не так с потоками?

...