[英]How to persist data between requests using Django
我有一個在 Kubernetes 集群中運行的 Django 應用程序,我想為它實現一個 prestop 鈎子。 這里的想法是,無論何時調用 prestop 鈎子,pod / 容器都將無法通過就緒探測檢查,因此它在被集群關閉之前不會收到任何新請求。 在這種情況下,readiness 探針和 prestop 鈎子都是我的應用程序中的 api 端點:/readiness 和 /prestop。
此外,為了使就緒探測失敗,每當調用 /readiness 時,我必須返回一個高於 400 的代碼。
所以我的問題是,如何在調用 prestop 鈎子后存儲一個狀態,表明我應該在就緒探測器中返回 400? 請注意,我應該只為調用了 prestop 鈎子的 pod 返回 400,其他 pods/容器應該繼續正常運行。 所以我正在尋找一種方法來跟蹤單個 pod/容器的狀態。
我做了一個非常愚蠢的測試,看看我是否可以在請求之間保持計數器的狀態:
class ReadinessProbeView(View):
def __init__(self):
self.count = 0
def get(self, request):
result = {}
self.count = self.count + 1
result["healthy"] = True
result["count"] = self.count
return JsonResponse(result, status=200)
但是,無論我調用此函數多少次, count = 1
,因此在請求之間不會保持狀態。
對此有很多不同的解決方案。 根據您的數據大小,您可以將數據存儲在 session 對象、apps 對象中,甚至可以像這些人那樣打開一個小型數據庫,如 sqlite 或內存結構,例如 redis:
以下是訪問會話數據的入門:
我遵循了@coderanger 的建議並使用了一個全局變量。 我的就緒探測器現在按預期工作。
這是我更新的示例:
count = 0
class ReadinessProbeView(View):
def get(self, request):
result = {}
global count
count = count + 1
result["healthy"] = True
result["count"] = count
return JsonResponse(result, status=200)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.