Я бегу, витая с pymongo. Я знаю, что при использовании запроса pymongo .find() вам нужно отложить его, когда вы перебираете курсор.Вам нужно отложить .count() в pymongo и перекрутить?
То же самое относится к .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: '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'' –
Я отредактировал свой ответ. –