2017-08-30 2 views
1

dans un service Web (flacon de serveur Web, déployé avec gunicorn, les travailleurs gevent), il y a un gestionnaire de requêtes interroge un ensemble d'objets et mettre à jour le statut comme ci-dessous:mongoengine ne peut pas charger correctement les données dans concurrency

def update_status(job_id,info_ids): 
    infos = Info.objects(job_id=job_id, info_id__in = info_ids) 
    if len(infos) == 0: 
     logger.error('infos are not found') 
    for i in infos: 
     pass 

Je suis sûr que les informations sont dans la base de données, d'autres services le demanderont dans la concurrence, mais dans certaines demandes, j'ai enregistré l'erreur dans les journaux (les infos ne sont pas trouvées). Je suis assez confus pourquoi les données ne peuvent pas être chargées parfois.

Répondre

0

Je ne sais pas sur les autres parties de votre code, mais je suppose que la classe Info est votre document mongoengine comme ceci:

class Info(mongoengine.Document): 
    job_id = mongoengine.StringField(...) 
    info_id = mongoengine.StringField(...) 

S'il est vrai, vous devez utiliser Info.objects à la place de Info.objet pour accéder au jeu de requête de votre collection (notez les 's' à la fin des objets). Donc, votre code doit être quelque chose comme ceci:

infos = Info.objects(job_id=job_id, info_id__in = info_ids) 
+0

désolé de vous troubler, c'est la faute de frappe, en fait dans mon code est 'objets' – lestergyl