我有一个在Docker容器上运行的django后端应用程序, 我在某些需要使用原子交易的地方
因此,由于我的流量很高,并且在许多地方需要昂贵的计算,所以我想运行django应用程序的另一个实例,并平衡负载,
我的问题是,instance1
开始了原子事务,并且instance2
要在同一记录上开始原子事务,instance2
是否看到instance1
正在运行原子事务,因此请求将等到instance1
完成吗?
谢谢
答案 0 :(得分:0)
是的,Django能够处理此类请求!
对于并发事务,可以在select_for_update
块内的manager
或queryset
对象上使用transaction.atomic()
方法。您可以从here中找到有关select_for_update
的文档。
注意:将
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()