データベースにプッシュされた測定値をリアルタイムで更新する Web アプリを作成しています。そのためには、ユーザーがページにアクセスするたびにバックグラウンドでメソッドを実行し続ける必要があります。データはユーザー固有であるため、バックグラウンド スレッドを追加するだけでは役に立ちません。ただし、難しいのは、ボタンを押すとスレッドを停止し、すぐに別のデータでスレッドを再開できるようにする必要があることです。次のようなイベントレット gunicorn とフラスコ ソケットでソリューションを作成してみました。
@socketio.on('update', namespace='/update')
def make_thread(*args):
thread = Thread(target=update(args)
thread.daemon = True
thread.start()
def update(*args):
while True:
//code that keeps running to query changes
socket.emit('update_reading', reading)
time.sleep(10)
私の問題は、コードが機能し、フロントエンドを更新している間、特定のユーザーに対してこのスレッドを作成する方法を正確に理解できないように見えることです(それが必要な場合でも)。また、別のソケット メソッドからのスレッドを停止し、代わりに新しいソケット メソッドを開始する方法。