0
我正在運行與pymongo扭曲。我知道當使用pymongo .find()查詢時,您需要在迭代遊標時將其延遲。你需要在pymongo中推遲.count()並扭曲嗎?
這同樣適用於.count()嗎?我需要推遲還是不停止?
編輯:如果它必須被推遲,那麼正確的做法是什麼?
我需要先創建一個光標,然後調用指望它:
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: '詮釋' 對象不是可調用
編輯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中的參數傳入 –
我編輯了我的答案。 –