我有一个django后端应用程序,我正在docker容器上运行,我在一些需要它的地方使用原子事务
因为我有很高的流量,并且有许多地方需要昂贵的计算,我想运行django应用程序的另一个实例,并平衡负载,
我的问题是instance1
开始一个原子事务,而instance2
想要在同一记录上启动一个原子事务,instance2
是否看到instance1
正在运行一个原子事务,所以请求将等到instance1
完成?
谢谢
是的,Django有能力处理这类请求!
对于并发事务,您可以在select_for_update
上使用manager
方法,或者在queryset
块中使用transaction.atomic()
对象。你可以找到select_for_update
的here文件。
注意:使用
transaction.atomic()
和select_for_update()用于处理数据库级别的并发性和原子性。
select_for_update
在数据库级别执行以下类型的查询。
SELECT FOR UPDATE wallet where wallet.id = '1'
因为即
from django.db import transaction
user_wallet = Wallet.objects.select_for_update().get(user=request.user) # select for update query
with transaction.atomic(): # atomic transactions block
user_wallet.amount += Decimal('200') # updating user's wallet amount
user_wallet.save()