python如何避免死锁_python – 在Django ORM中避免MySQL死锁

MySQL数据库上使用Django我收到以下错误:

OperationalError: (1213, 'Deadlock found when trying to get lock; try restarting transaction')

故障在以下代码中出现:

start_time = 1422086855

end_time = 1422088657

self.model.objects.filter(

user=self.user,

timestamp__gte=start_time,

timestamp__lte=end_time).delete()

for sample in samples:

o = self.model(user=self.user)

o.timestamp = sample.timestamp

...

o.save()

我有几个并行进程在同一个数据库上工作,有时它们可​​能具有相同的工作或样本数据的重叠.这就是为什么我需要清除数据库然后存储新样本,因为我不想要任何重复.

我正在使用transaction.commit_on_success()在事务块中运行整个事情,并且经常遇到OperationalError异常.我更喜欢的是事务不会陷入死锁,而只是锁定并等待其他进程完成其工作.

根据我的阅读,我应该正确地订购锁,但我不确定如何在Django中执行此操作.

什么是最简单的方法来确保我没有收到此错误,同时仍然确保我没有丢失任何数据?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值