Connection.close() не возвращает соединение в пул

Друзья, всем большой привет!

Не так давно мне была поставлена задача ускорить работу нашего питоновского скрипта(для контекста: все, что он делает, это перекладывает данные из одной БД в другую). Стало быть, нужно сделать так, чтобы он перекладывал побыстрее. Разумеется самым логичным решением было сделать параллельную запись в базу c использованием connection pool из библиотеки psycopg2. Написав что-то вроде: **_connection = None try: connection = connectionpool.getconn()

#тут какой-то код

except Exception as e:

#тут обработка исключения

finally: connectionpool.putconn(connection)_**

Я спокойно отправил код на ревью, после чего в замечаниях к МР мне указали, что "try-except это не по-питоновски и лучше использовать with". На моё замечание, что with после выполнения освобождает все ресурсы, а значит и закроет соединение, что в свою очередь удалит его из пула, мне не был дан никакой ответ. Такой поворот привел к повышению температуры моего тела чуть ниже спины, и на выходных об этом случае было рассказано друзьям, которые заметили, что вообще то connection.close() должен возвращать соединение в пул, поэтому использование with правомерно. Тут у меня второй раз поднялась температура от того факта, что можно было бы мне это и в комментарии написать, и тогда мне бы не пришлось ответы непонятно у кого. Однако в первый же рабочий день попытавшись использовать with закономерно получил ошибку connection pool exhausted. Как оказалось, моё изначальное предположение оказалось верным, о чем даже было написано в документации к библиотеке, но кто же её читает….

Если возник вопрос: а почему это пост про питон, а в профиле указан golang, то это отдельная история.

Connection.close() не возвращает соединение в пул | Сетка — социальная сеть от hh.ru