В течение одного сеанса с уровнем изоляции READ_COMMITTED
список активных пидов из pg_stat_activity
собирается только один раз, и при следующих попытках возвращаются те же результаты.Кто-нибудь может объяснить, почему?
Сценарий для воспроизведения этого явления:
#!/usr/bin/env python
import time
from sqlalchemy.engine import create_engine
from sqlalchemy.orm.session import sessionmaker
from sqlalchemy.pool import NullPool
pg_uri = 'postgresql://test:test@localhost:5432/test'
def get_session():
bind = create_engine(pg_uri, poolclass=NullPool, echo=False, isolation_level="READ_COMMITTED")
session_class = sessionmaker(bind=bind)
return session_class()
def pg_sleep():
get_session().execute('select pg_sleep(3)')
def show_backends(session, prefix):
backends = session.execute("SELECT pid, query FROM pg_stat_activity where state = 'active';").fetchall()
print ("%s found processes:" % prefix)
for backend in backends:
print("%s: %s %s" % (prefix, backend[0], backend[1][:32]))
def spawn_backend():
import threading
print("spawning backend")
threading.Thread(None, target=pg_sleep).start()
show_backends(get_session(), 'thread')
session = get_session()
for tries in range(3):
spawn_backend()
time.sleep(1)
show_backends(session, '-main-')
Я использую:
postgresql-9.6
Python 2.7.12
SQLAlchemy 1.1.12