私はサーバー(デーモン)を開発中です。シングルスレッドサーバー/デーモン(Python)の実装
サーバーには1つの「ワーカースレッド」があります。ワーカースレッドはコマンドキューを実行します。キューが空の場合、ワーカースレッドは一時停止します(ただし、メモリ内の特定の状態を保持するため、終了しません)。メモリに状態のコピーを1つだけ入れるには、常に1つの(ゼロではなく数ではなく)ワーカースレッドを実行する必要があります。
クライアントがUnixソケットに接続してコマンドを送信すると、このキューの最後に要求が追加されます。
コマンドが発行されると、ワーカースレッドのコマンドキューに追加されます。それがキューに追加されると、サーバーは「OK」のような応答を返します。サーバーがコマンドを受信してから「OK」と応答するまでの間に長い休止時間はないはずです。ただし、キュー内でコマンドを実行するには時間がかかることがあります。
ワーカースレッドの主な「仕事」は、小さな(比較的短い時間で)チャンクに分割されます。チャンクの間では、ワーカースレッドはキューを検査( "食べ"、空にする)し、キューから抽出されたデータに基づいて作業を続けます。
このサーバー/デーモンをPythonで実装する方法は?
私はなぜそれが単一のスレッドである必要があるのか尋ねることはできますか? ソケットからのメッセージをリッスンし、すぐにクライアントに返信するスレッドがあった場合、何が壊れますか。その後、リスナーとワーカーの間にキューがあり、リスナーはメッセージをこのキューにディスパッチします。それらは到着順に処理され、ワーカースレッドは「メモリ内の状態」が保持され、他のスレッドまたはプロセスによって混乱しないようにする必要があります。 – Hannu
@ハヌー私は一人の労働者**のスレッドが必要だと主張します。ソケットリスンのための別のスレッドを持つことはOKです。 – porton
ソケットリスナーのスレッドとキューで問題を解決するべきではありませんか? あなたのソケットは常に新しいメッセージを受け取ります。すぐに応答され、ワーカーはその状態を保存し、リクエストは到着順に処理されますか?作業者は、キューに収まるようにタスクをキューから「食べる」ことができます。 – Hannu