問題タブ [tornado-motor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
611 参照

asynchronous - 相互に依存する Tornado 非同期デコレーター

トルネードについて頭を悩ませようとしています。私はmongodbに裏打ちされたチャットアプリケーションを作成しており、motorそれへの非ブロックアクセスに使用しています。

私が達成しようとしているのは次のとおりです。

  1. motormongo からユーザーのレコードを非同期にプルするために使用するデコレーターを作成します。
  2. 資格情報を検証する (ユーザー名とトークン)
  3. 上記1.で取得したuser_idがチャットルームへのアクセスを許可されていることを確認する別のデコレーターを作成します。motorこれには、「ChatRoom」レコードを取得するために、mongo への別の非同期呼び出しが必要です。
  4. 問題がなければチャットルームに登録する

デコレータ 1. が動作しています (基本的にhttp://tornadogists.org/5251927/から取得):

問題は、2 番目のデコレータの場合、 にアクセスする必要があることですself.current_user。これは非同期コールバックで設定されるため、デコレーターに入ったときには使用できませんvalidation(つまり、認証デコレーターが完了する前に検証デコレーターが呼び出されます)。

非同期関数でこのようにデコレータを使用することはできませんか? True であることを確認した後、上記のメソッド内で検証メソッドを呼び出すだけでよいself.current_userので、コールバックのようになりますか?

Handler のメソッドをこれらのデコレータの両方でラップして、別の場所で再利用できるようにしたいのが理想です。

更新 実際、依存関係はありません。user_id はパラメーターとして提供され、両方のデコレーターを並行して実行するために使用できます。1 つは認証を確認するため、もう 1 つはその ID を持つユーザーがルームへのアクセスを許可されているかどうかを確認するためです。open()メソッドは、の場合にのみ続行されますself.auth_check == True and self.room_check == True

open()ただし、非同期デコレータが完了する前に呼び出されることはありますか?

0 投票する
0 に答える
193 参照

python - コレクションを追跡し、Tornado ですべての WebSocketHandlers を提供する 1 つのループを作成するにはどうすればよいですか?

次のコードは、単一のwhile Trueループを実行し、すべてのリスナーに同じデータを提供します。意図したとおりに機能しますが、醜いと思います。これを達成するためのより良い方法はありますか?

実際には、MongoDB oplog を追跡し、出力を解析して、関心のあるリスナーのみにサービスを提供します。その場合listeners、たとえばキーが ObjectID であり、値が WebSocketHandlers の配列である dict になります。これは良いアイデアのように聞こえますか?

0 投票する
1 に答える
843 参照

pymongo - python motor mongoカーソルの長さまたは次のピーク

モーターモンゴカーソルの長さを決定する方法や、次があるかどうかを確認する方法はありますか (fetch_nextおそらくではなくhas_next)

cursor.size()提供された limit() を考慮しないものではありません

基本的に必要なjsonコンマを追加したい

0 投票する
1 に答える
678 参照

pymongo - python motor は集計時に fetch_next 例外を提供します

no fetch_nextMotor の集計関数で例外が発生して困っています

コードは

それは次のことを引き起こしました

例外: :'TracebackFuture' オブジェクトに属性 'fetch_next' がありません

次に、SOの質問で見つかった次のことを試しました

それは同じ例外を提供しました。

Mongo シェルで集計を実行すると、正真正銘の結果が得られます

Motor はfind、`find_one でそのような問題を提供していません。実際、それ以外の場合は素晴らしく機能します。

インストールはpip install motorUbuntuで行いました。

乾杯

0 投票する
1 に答える
521 参照

python - tornado コルーチン関数の変数はどうなりますか?

私はノンブロッキングIOの概念に不慣れで、コルーチンについて理解するのに苦労しています。このコードを検討してください:

get関数が呼び出されると、 string が作成されますvarmotor.insert関数が の完了を待っているとき、この変数はどうなりますか? 私の理解では、「非ブロッキング」とは、IO 呼び出しが完了するのを待っているスレッドがなく、待機中にメモリが使用されていないことを意味します。varでは、格納されている値はどこにあるのでしょうか? 実行が再開されたときにどのようにアクセスできますか?

どんな助けでも大歓迎です!