簡體   English   中英

如何使用 FastAPI + uvicorn 在工作人員之間共享數據庫連接?

[英]How to share database connection between workers using FastAPI + uvicorn?

我正在嘗試使用 FastAPI + uvicorn 創建一個應用程序。

此應用程序必須能夠處理同時連接。 我不能保證所有代碼都可以異步/等待方式執行。

然后,我想使用 uvicorn 的 --workers --workers X選項來處理同時連接,但我需要在所有工作人員之間共享相同的數據庫連接。

我嘗試了以下示例:

import time
from pymongo.database import Database
from fastapi import Depends, FastAPI
from dynaconf import settings
from pymongo import MongoClient

print("-------> Creating a new MongoDB connection")
db_conn = MongoClient(settings.MONGODB_URI)
db = db_conn.get_database('mydb')

app = FastAPI()

def get_db():
    return db

@app.get("/{id}")
async def main(id: str, db: Database = Depends(get_db)):
    print("Recebido id: " + id)
    time.sleep(10)
    return { 'id': id }
$uvicorn main:app --workers 2
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started parent process [24730]
-------> Creating a new MongoDB connection
-------> Creating a new MongoDB connection
INFO:     Started server process [24733]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Started server process [24732]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

但我得到了兩個 mongodb 連接。

如何共享 MongoDB 連接並避免為每個工作人員創建連接?

您不能共享連接,因為它是有狀態的。 兩個或多個進程無法成功使用單個套接字連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM