Django; ThreadPoolExecutor вызывает FATAL; извините, слишком много клиентов

Я знаю, что эта ошибка уже была опубликована, но контекст моей проблемы отличается. Я безуспешно пробовал предложенные решения.

Я использую django-apscheduler для планирования некоторых команд управления, одна из них использует ThreadPoolExecutor для ускорения длительного процесса.

К сожалению, он не закрывает соединения, что в конечном итоге приводит к:

exception:connection to server at "localhost" (::1), port 5432 failed: FATAL: sorry, too many clients already

Я использую PostgreSQL backend, и когда я запускаю команду управления напрямую, я вижу в pgAdmin, что количество сессий базы данных уменьшается после выполнения.

Однако при выполнении django-apscheduler они накапливаются и в конечном итоге вызывают FATAL: sorry, too many clients already.

Я пробовал вызывать close_old_connections() из from django.db import close_old_connections, но это, похоже, ничего не дает.

Может ли кто-нибудь указать мне правильное направление?

Вот как выглядит моя команда управления:

import concurrent
from django.core.management.base import BaseCommand

from data_model.models import DataModel

class Command(BaseCommand):
    help = "Do something interesting"

    def handle(self, *args, **kwargs):

        with concurrent.futures.ThreadPoolExecutor(10) as executor:
            list(executor.map(DataModel.objects.do_something_interesting))

Я также попробовал добавить время истечения срока действия CONN_MAX_AGE в конфигурацию DB, но это не помогло:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql_psycopg2",
        "NAME": env.str("POSTGRES_DB"),
        "USER": env.str("POSTGRES_USER"),
        "PASSWORD": env.str("POSTGRES_PASSWORD"),
        "HOST": env.str("POSTGRES_HOST"),
        "PORT": 5432,
        "CONN_MAX_AGE": 60
    },
}

Выполнение команды управления завершено, где стрелка:

enter image description here

Вернуться на верх