Я вижу количество незанятых соединений, набирающих запрос PSQL, вот так. Это проблема, только когда я использую SqlAlchemy в своих задачах сельдерея, но соединения закрываются должным образом, когда запросы API поступают к моему приложению Flask. Я думал, что с помощью блока контекста он должен автоматически закрывать соединения. Нужно ли делать что-то более явное? Я попытался добавить db.session.remove () в конец каждой функции задачи, но ничего не изменилось.
SELECT count(*), state FROM pg_stat_activity GROUP BY 2;
373 NULL
1 active
6 idle
config.py
SQLALCHEMY_MAX_OVERFLOW = 10
SQLALCHEMY_POOL_SIZE = 5
init.py
db: SQLAlchemy = SQLAlchemy()
celery = Celery("my_app", broker=config.BROKER_URL)
celery.conf.timezone = "America/Los_Angeles"
def create_app() -> Flask:
_app = Flask(__name__)
_app.config.from_pyfile("config.py")
db.init_app(_app)
return _app
@celery.on_after_configure.connect
def setup_periodic_tasks(sender: Celery, **kwargs: Any) -> None:
from my_app import tasks
sender.add_periodic_task(
10,
tasks.some_task.s(),
name="do something every 10s",
)
tasks.py
@celery.task()
def some_task() -> None:
with create_app().app_context():
# do stuff
...