在Flask 應用程式中,將應用程式狀態儲存在全域變數中可能看起來像方便,但它引起了對執行緒安全性的擔憂。全域變數在所有執行緒和進程之間共享,當並發請求同時修改相同資料時,可能會導致資料損壞。
全域變數的問題是它們缺乏防止並發存取的同步機制。並發執行的多個執行緒或進程可以在沒有任何控制的情況下存取和修改全域變量,從而導致意外和不正確的結果。
在提供的範例中:
global_obj = SomeObj(0)
每個存取 global_obj 的執行緒或行程都會有自己的對該物件的本機參考。如果多個用戶端同時執行查詢,則 param 屬性可能不會以預期順序遞增。這可能會導致跳過數字或不正確的回應。
有幾種替代方法可以以執行緒安全的方式儲存在請求之間共享的資料:
雖然開發伺服器可以在單一執行緒和進程模式下運行,但啟用執行緒或進程(例如,app.run(threaded=True))可能會暴露線程安全性問題。同樣,支援非同步工作執行緒的 WSGI 伺服器可能需要額外的機制來確保全域變數的執行緒安全性。
全域變數不應該用於儲存 Flask 應用程式中請求之間共享的資料由於資料損壞和不正確行為的可能性。相反,請考慮使用上述替代方法來確保多執行緒或多進程環境中的執行緒安全並維護資料完整性。
以上是如何在 Flask 應用程式中的請求之間安全地共享資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!