Je suis en cours d'exécution avec pymongo tordu. Je sais que lorsque vous utilisez la requête pymongo .find(), vous devez la différer lorsque vous faites une itération sur le curseur.Avez-vous besoin de reporter .count() dans pymongo et tordu?
-il de même à .Count()? Ai-je besoin de reporter ou de ne pas arrêter?
EDIT: si elle doit être différée, quelle serait la bonne façon de le faire?
Ai-je besoin de créer un curseur d'abord, puis appeler compter sur elle:
value_deferred = deferToThread(
mongo_collection.find,
mongo_query,
)
value_deferred.count()
ou est-il possible d'obtenir le nombre tout de suite?
Si je fais ceci:
def get_filtered_count():
return db_collection.find(mongo_query).count()
value_to_get = deferToThread(get_filtered_count())
Je reçois cette erreur: exceptions.TypeError: objet 'int' est pas appelable
EDIT 2: L'utilisation du rendement ici justifié? J'ai des erreurs en l'appelant autrement.
@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)
Merci. Dans ce cas, dois-je d'abord créer un curseur dans deferToThread, puis appeler un compte? Voir ma modification, s'il vous plaît. –
Il n'y a généralement aucun mal à créer le curseur dans le fil. Le curseur peut également être créé dans le thread principal et passé en tant que paramètre dans '' deferToThread'' –
J'ai modifié ma réponse. –