私はpymongoでねじれて走っています。私はpymongo .find()クエリを使用するとき、カーソルを反復処理するときにそれを延期する必要があることを知っています。pymongoとtwistedで.count()を延期する必要がありますか?
同じことが.count()に適用されますか?私はそれを延期する必要がありますか、それとも停止していませんか?
EDIT:延期する必要がある場合、それを行う正しい方法は何ですか?
value_deferred = deferToThread(
mongo_collection.find,
mongo_query,
)
value_deferred.count()
またはすぐにカウントを取得するにはどのような方法があります:
は、私が最初にカーソルを作成する必要がありますし、それを頼りに呼んでいますか?私はこれを行う場合は
:
def get_filtered_count():
return db_collection.find(mongo_query).count()
value_to_get = deferToThread(get_filtered_count())
は、私はこのエラーを取得:exceptions.TypeErrorを:歩留まりの使用は、ここで正当化される:「int型のオブジェクトは、
はEDIT 2呼び出すことはできませんか?私はそうでなければそれを呼び出すときにエラーが発生します。あなたは延期しなければならない何
@inlineCallbacks
def render_deferred(self, request):
cursor = self.mongo.find()
get_counter = yield deferToThread(cursor.count)
page_size = 3
number_of_pages = get_counter/page_size
return final_value
def render_GET(self, request):
## some code
deferred = self.render_deferred(request)
deferred.addCallback(_send, request)
deferred.addErrback(handle_failure, request)
感謝。その場合、最初にdeferToThreadにカーソルを作成してからカウントを呼び出す必要がありますか?私の編集を参照してください。 –
スレッド内にカーソルを作成する際に通常は問題ありません。カーソルはメインスレッドで作成し、 '' deferToThread''のパラメータとして渡すこともできます –
私は自分の答えを編集しました。 –