MongoEngine无法以并发状态正确加载数据



在Web服务(Flask Web服务器,与Gunicorn,Gevent Workers部署)中,有一个请求处理程序会查询一组对象,并更新状态,如下:

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

我确定Infos在数据库中,其他服务将以并发要求请求,但是在某些请求中,我记录了日志中的错误(找不到INFO)。我很困惑为什么有时无法加载数据。

我不确定您的代码其他部分,但我想信息类是您的Mongoengine文档:

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

如果是真的,则必须使用 info.Objects 而不是 info.Object 才能访问集合的QuerySet(在对象的末尾注意'S')。因此,您的代码必须是这样的:

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

最新更新