mongoengine无法在并发中正确加载数据

时间:2017-08-30 02:47:43

标签: python mongodb pymongo mongoengine

在一个Web服务(flask web服务器,部署有gunicorn,gevent worker)中,有一个请求处理程序将查询一组对象并更新状态,如下所示:

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

我确定信息存在于数据库中,其他服务将以并发方式请求此信息,但在某些请求中,我在日志中记录了错误(未找到信息)。我很困惑为什么有时无法加载数据。

1 个答案:

答案 0 :(得分:0)

我不确定代码的其他部分,但我猜Info类是你的mongoengine文档:

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

如果确实如此,您必须使用 Info.objects 而不是 Info.object 来访问您的集合的查询集(请注意对象末尾的's') 。所以,你的代码必须是这样的:

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