0

ユーザーと「会話」し、ユーザーの発言に基づいてタスクを実行する Python アプリケーションを開発しています (例: ユーザー:「新しい facebook メッセージはありますか?」、回答:「はい、2 つの新しいメッセージがあります。メッセージを表示しますか?")。Facebook や Twitter との統合などの機能は、プラグインによって提供されます。事前定義された解析ルールに基づいて、アプリケーションは解析された引数でプラグインを呼び出し、その応答を使用します。アプリケーションは、異なるユーザーからの複数のクエリに同時に (または実質的に同時に) 応答できる必要があります。

現在、ユーザー入力を引数として関数「Respond」を呼び出す必要があります。ただし、これにはいくつかの欠点があります。

i) アプリケーションは「話しかけられたときにのみ話す」ことができます。facebook に新しいメッセージを問い合わせるかどうかを決定することはできず、そうするように言われなければ、そうするかどうかをユーザーに伝えることができません。

ii) アプリケーションは一度に 1 つのことしかできないため、一度に複数のユーザーと会話するのは非常に困難です。アリスがアプリケーションに Facebook で新しいメッセージを確認するように要求した場合、ボブはアプリケーションと通信できません。

iii) 映画のダウンロードなど、完了するのに時間がかかるプラグインを開発 (および使用) できません。前のタスクが完了していない間、アプリケーションが何もできないためです。

ここでは、マルチスレッド化が当然の方法のように思えますが、一度に 500 のスレッドを作成して使用するとパフォーマンスに劇的な影響が及ぶのではないかと心配しているため、クエリごとに 1 つのスレッドを使用する (クエリはユーザーからのステートメントです) ようには思えません。正しいオプション。

これを行う正しい方法は何ですか?Twisted について少し読んだことがありますが、「リアクター」アプローチは非常にエレガントに思えます。ただし、アプリケーションにそのようなものを実装する方法がわかりません。

4

1 に答える 1

0

どんな種類のアプリケーションになるのかよくわかりませんでしたが、あなたの質問に答えようとしました

  1. クエリのスレッドを作成し、しばらくスリープします
  2. ユーザーごとにスレッドを作成し、ユーザーがいなくなったらスレッドを閉じます
  3. ダウンロードして停止するスレッドを作成する

結局、500 スレッドになることはありません。

于 2012-12-01T20:44:27.210 に答える