【问题标题】:django/celery data import fails to check for existing datadjango/celery 数据导入无法检查现有数据
【发布时间】:2016-04-06 20:47:43
【问题描述】:

我用 django 运行 celery。我使用任务将对象流导入我的数据库。每个任务导入一个对象。并发性为 2。流对象内可以复制,但不应该在我的数据库中。

我正在运行的代码:

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)

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

我假设数据库检查在此并发设置下无法正常工作。你推荐什么架构来解决这个问题?

【问题讨论】:

    标签: django database concurrency celery


    【解决方案1】:

    你必须使用锁定架构,所以会阻止两个任务同时执行对象获取部分,你可以使用python-redis-lock来做到这一点。

    【讨论】:

    • 哇,很棒的建议。会去的!仅供参考,我的临时解决方案是对两个列设置唯一约束,以至少确保 db 保持一致。引发的错误会终止 celery 任务。现在更像是一种蛮力般的尝试。
    猜你喜欢
    • 2023-03-15
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    • 2016-06-25
    • 1970-01-01
    • 2011-07-24
    相关资源
    最近更新 更多