在Python中锁定任意资源

时间:2016-03-08 22:20:31

标签: python django thread-safety

我正在Django中构建一个付款表单,出于显而易见的原因,我需要确保同一笔付款不能被处理两次(例如,用户点击两次)。我理解如何创建,获取和发布Lock对象,这会阻止表单一次处理两个付款,但我想要的是阻止同一次购买的同时付款(存储在数据库中)

我可以通过创建自己的基于数据库的锁系统解决问题:

class LockToken(models.Model):
    key = models.CharField(max_length=200, unique=True)

    @classmethod
    def create_for(cls, obj_cls, obj_id):
        bits = (obj_cls._meta.app_label, obj_cls._meta.model_name, obj_id)
        key = '|'.join(map(str, bits))
        return cls.objects.create(key=key)

有更好的方法吗?

0 个答案:

没有答案