Это связано с sqlalchemy
и pg8000
.Как достичь максимального уровня соединения с sqlalchemy?
Я читал везде, что должен закрыть объект ResultProxy
, чтобы соединение могло быть возвращено в пул.
Локальная база данных тест позволяет максимально 100
соединений:
$ psql -h 127.0.0.1 -U postgres
Password for user postgres:
psql (9.5.5, server 9.6.0)
WARNING: psql major version 9.5, server major version 9.6.
Some psql features might not work.
Type "help" for help.
postgres=# show max_connections;
max_connections
-----------------
100
(1 row)
Следующий тестовый скрипт создает двигатель в каждом цикле и не читает ни закрыть ResultProxy
объект. Это действительно так плохо, как может быть.
Странная вещь, она также не генерирует ошибку too many connections
. Это действительно запутывает меня. Выполняет ли sqlalchemy какую-то магию? Или, может быть, postgres
на самом деле волшебство?
#!/usr/bin/env python2.7
from __future__ import print_function
import sqlalchemy
def handle():
url = 'postgresql+pg8000://{}:{}@{}:{}/{}'
url = url.format("postgres", "pass", "127.0.0.1", "5432", "usercity")
conn = sqlalchemy.create_engine(url, client_encoding='utf8')
meta = sqlalchemy.MetaData(bind=conn, reflect=True)
table = meta.tables['events']
clause = table.select()
result = conn.execute(clause)
if __name__=='__main__':
for i in range(2000):
print(i)
handle()
спасибо, что делает полный смысл. Протестировано и проверено. – lingxiao