私は基本的にユーザーにファイルを提供するPython + Tornadoを使用してWebアプリケーションを作成しています。私はデータベースがありません。関数へのTornado非同期呼び出し
ファイルは、使用可能な場合は直接ピックアップされ、提供されるか、そうでない場合は生成されます。
いくつかのファイルはすでに利用可能であるかもしれないが、他のファイルは生成される必要がある(したがって、彼らは待つ必要があり、他のユーザーをブロックしたくない)ので、クライアントを非同期で提供したい。
私はファイルのピッキングや生成を管理するクラスを持っています。私はそれをTornadoから呼び出すだけです。
これを達成する最も良い方法(CPUとRAMで最も効率的)は何ですか?スレッドを使うべきですか?サブプロセス?シンプルなgen.Task like this one?
また、私の実装はGoogle App Engineで動作するようにしたいと思います(サブプロセスを生成することはできないと思います)。
私は非同期Webサービスに比較的新しいので、どんなヘルプも歓迎します。
gen.Taskが正常に動作します。あなたのファイルを取得/生成しているコードがうまくいけば、スレッドは正常に動作します。複数のプロセスを起動することもできますが、Google App Engineの制限はわかりません。 – sean
返事ありがとうございます。また、私は複数のgen.Taskを生成する場合、それがうまくいく方法を知っていますか?私の**インスタンスメソッド**はCPUと時間がかかることがあります。このメソッドが複数のユーザーから何回か呼び出されると、どうなりますか?すべてのメソッドが非同期に並行して実行されるのでしょうか、あるいは次のメソッドが前のメソッドが最初に終了するのを待つでしょうか? (私は自分のアプリケーション全体で使用するクラスのインスタンスを1つしか持っていないことに注意してください) – gaborous
完全に空白でなければなりませんが、ソリューションに関係なく、スレッドに関係なく多くのスレッドで問題になります。これが心配な場合は、別々のプロセスに分割したり、複数のインスタンスを負荷分散の背後で実行したりしてください。 – sean