![](/img/trans.png)
[英]How can I update a list of lists very quickly in a thread-safe manner? - python
[英]How to handle a MongoDB connection in a large Flask project in a persistent and thread-safe manner?
我有一個跨多個模塊的大型Flask
項目。 我希望所有這些模塊都能訪問我的 MongoDB ( PyMongo
) 數據庫連接。 根據最佳實踐,正是我想要一個連接池的整個應用程序(即在所有模塊)堅持。
db
對象不是只讀時)。 示例如下。Flask.g
“全局”變量,因為它會隨着每個請求而被Flask.g
,使其本質上等同於第 2 點。config.py
)並在需要時從其他模塊調用它,因為這樣我每次從不同模塊調用它時都會創建新連接。這是我將如何創建全局變量並跨模塊使用它的最小工作示例(Infeasible Solutions 中的第 1 點)。
主文件
from module1 import helper_function
app = Flask(__name__)
db = new_db_connection()
@app.route('/page1'):
def page1():
db_return = db.query1()
db.cache = new_value # this makes this entire code thread-unsafe
return db_return
@app.route('/page2'):
def page2():
db_return = db.query2()
db_return2 = helper_function(db) # doesn't seem right that I have to pass this object around all the time
return db_return
模塊1.py
def helper_function(db):
db_return = db.query3()
return db_return
我一直在同一條船上,我想出的答案是向每個函數傳遞一個參數。 如果有更好的方法,我很想知道。
而不是傳遞 db 值,我實際上傳遞了一個自定義上下文對象,該對象具有 mongoclient db 以及一堆其他有用的方法(例如記錄結果 ID 等)。
class Context:
def __init__(self, cs: str = None) -> None:
self.cs = cs
try:
self.db = pymongo.MongoClient(self.cs).get_database()
except Exception as e:
raise ValueError(f'Failed to connect to server using connection string {self.cs}')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.