![](/img/trans.png)
[英]Prevent a race condition where a many requests may concurrent trigger a call which should run only once
[英]Prevent MongoDB race condition in update query during multiple requests
我在 Flask 中有一個簡單的 web 應用程序,我使用 Mongoengine 作為 ORM。 API 接收請求,將請求添加到工作隊列,減少用戶的許可證計數並將其保存回來。 下面給出的示例代碼:
def process_request(body):
user = User.objects.get(username=username_from_session)
add_request_to_worker_queue(body['data'])
user.total_license_count = user.total_license_count - 1
user.save()
這按預期工作。 但是我注意到,當同一用戶同時發送多個請求時,license_count 並沒有按預期減少。 我想這是因為其他請求沒有看到第一個請求的更新,因為它仍在處理中。
我嘗試在請求中添加隨機延遲,但沒有幫助。 我不知道 MongoDB 中是否有某種形式的鎖定機制來等待其他進程完成處理。 我該如何解決這個問題以防止這種情況發生。
我的堆棧是 Python,Flask,Mongoengine,MongoDB
使用條件更新,將條件設置為 license_count > 0,使用 $inc 運算符執行遞減並讀取完成的更新次數以查看計數是否開始為正。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.