以下に示すように、トルネードを使用して、オートコンプリート サービスを実装するハンドラーを作成するつもりです。
class AutoCompleteHandler(tornado.web.RequestHandler):
def initialize(self, indexbuilder):
self.indexbuilder = indexbuilder
self.index = indexbuilder.build_merged_index()
def get(self):
query = self.get_argument('q')
result = self.index[query]
self.set_header("Content-Type", 'application/json;')
self.set_header('charset', "utf-8")
self.write(json.dumps(result))
事実と要件
- これ
wordtreebuilder.build_merged_index
は非常に遅い方法であり、インデックス リストを更新するために 24 時間ごとに実行する予定です。 - トルネードのドキュメントによると、リクエストごとに新しい RequestHandler オブジェクトが作成されます。したがって
treebuilder
、インスタンス属性として持つことは私にとってはうまくいきません。
問題
要するに、どうすればこれを正しく行うことができますか?
インデックスをどこにキャッシュする必要がありますが、トルネードの非ブロック機能はまだありますか? (私は推測します) とindexbuilder
同じモジュールの下に置きAutoCompleteHandler
、グローバル変数へのインデックスを構築し、別のスレッドを生成して更新タスクを実行することもできますが、それは私には正しく見えず、作業は完了できると思いますトルネードを使用して、構造をよりエレガントにします。