我怎么能有一个不访问 Django 中数据库的原子代码块?



我正在做一个使用DjangoDjango REST Framework的项目。在其中一个视图中,有一个方法F(),它执行以下操作:

  1. 从数据库中读取数据(读取操作)
  2. 向第三方API发送创建(POST)请求。(虽然不是本地操作,但这是一个写操作,这是可能发生竞争条件的地方)
  3. 返回JSON数据

我希望F()是原子的,换句话说,如果服务器同时收到请求此视图的多个请求,服务器应该一次处理一个请求,并且不允许多个线程同时访问此代码块。如何才能做到这一点?我读到Django提供了transactions.atomic(),但这保证了数据库事务的原子性,我需要的是整个代码块的原子性,无论它是否访问数据库。

您正在寻找的概念是"互斥";或者一个"锁"。这篇文章可能会指引您正确的方向https://lincolnloop.com/blog/distributed-locking-django/

最新更新