关于 Django 的乐观锁问题
資深大佬 : IurNusRay 2
Django 的乐观锁真的有作用吗?我写了个例子,用 jmeter 开启 1000 个线程去请求,结果并不能解决资源竞争的问题,代码如下:
with transaction.atomic():
save_id = transaction.savepoint()
try:
book = BookInfo.objects.get(id=1)
origin_read = book.read
new_read = origin_read + 1
BookInfo.objects.filter(id=book.id, read=origin_read).update(read=new_read)
book.save()
except Exception as e:
print(e)
transaction.savepoint_rollback(save_id)
with transaction.atomic():
save_id = transaction.savepoint()
try:
book = BookInfo.objects.get(id=1)
origin_read = book.read
new_read = origin_read + 1
BookInfo.objects.filter(id=book.id, read=origin_read).update(read=new_read)
book.save()
except Exception as e:
print(e)
transaction.savepoint_rollback(save_id)
transaction.savepoint_commit(save_id)
理论上,book 表的 read 资源在 1000 次请求之后应该会从 0 增加到 1000,然而实际上只有 500 左右,当我降低线程数量到 100,也只能到 78,这是为什么呢
大佬有話說 (13)