django / celery数据导入无法检查现有数据

时间:2016-04-06 20:47:43

标签: django database concurrency celery

我和django一起经营芹菜。我使用任务将对象流导入我的数据库。每个任务导入一个对象。并发性是2.流内的对象可以复制,但不应该在我的数据库中。

代码i'运行:

if qs.exists() and qs.count() == 1:
    return qs.get()
elif qs.exists():
    logger.exception('Multiple venues for same place')
    raise ValueError('Multiple venues for same place')
else:
    obj = self.create(**defaults)

问题是,如果流中的对象是重复的并且彼此非常接近,那么应用程序仍然会导入相同的对象两次。

我认为db检查在这种并发设置中无法正常工作。你建议用什么架构来解决这个问题?

1 个答案:

答案 0 :(得分:1)

您必须使用锁定体系结构,因此会阻止两个任务同时执行对象提取部分,您可以使用python-redis-lock来执行此操作。