Я пытаюсь создать приложение с помощью FastAPI + uvicorn.
Это приложение должно поддерживать одновременные подключения. Я не могу гарантировать, что весь код может быть выполнен в режиме async / await.
Затем я решил использовать параметры --workers X
от uvicorn для обработки одновременных подключений, но мне нужно использовать одно и то же соединение с базой данных для всех рабочих.
Я пробовал следующий пример:
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 и избежать создания соединения для каждого рабочего?