Накапливая "холостые" PSQL соединения при использовании sqlalchemy в задачах сельдерея - PullRequest
0 голосов
/ 30 марта 2020

Я вижу количество незанятых соединений, набирающих запрос 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
        ...
...