Ответ 1
Вот мой комментарий и дополнительная информация:
Я использую Celery, SQLAlchemy и PostgreSQL для AWS, и такой проблемы нет. Единственное различие, о котором я могу думать, это то, что у меня есть база данных на RDS. Я думаю, вы можете попробовать переключиться на RDS временно, просто чтобы проверить, вопрос будет по-прежнему присутствовать или нет. Если он отключился с помощью RDS, тогда вам нужно будет изучить настройки PostgreSQL.
В соответствии с параметрами RDS у меня включен SSL:
ssl = 1, Enables SSL connections.
ssl_ca_file = /rdsdbdata/rds-metadata/ca-cert.pem
ssl_cert_file = /rdsdbdata/rds-metadata/server-cert.pem
ssl_ciphers = false, Sets the list of allowed SSL ciphers.
ssl_key_file = /rdsdbdata/rds-metadata/server-key.pem
ssl_renegotiation_limit = 0, integer, (kB) Set the amount of traffic to send and receive before renegotiating the encryption keys.
Что касается кода инициализации сельдерея, то примерно это
from sqlalchemy.orm import scoped_session
from sqlalchemy.orm import sessionmaker
import sqldb
engine = sqldb.get_engine()
cached_data = None
def do_the_work():
global engine, ruckus_data
if cached_data is not None:
return cached_data
db_session = None
try:
db_session = scoped_session(sessionmaker(
autocommit=False, autoflush=False, bind=engine))
data = sqldb.get_session().query(
sqldb.system.MyModel).filter_by(
my_type = sqldb.system.MyModel.TYPEA).all()
cached_data = {}
for row in data:
... # put row into cached_data
finally:
if db_session is not None:
db_session.remove()
return cached_data
Эта функция do_the_work
вызывается из задачи сельдерея.
sqldb.get_engine
выглядит следующим образом:
from sqlalchemy import create_engine
_engine = None
def get_engine():
global _engine
if _engine:
return _engine
_engine = create_engine(config.SQL_DB_URL, echo=config.SQL_DB_ECHO)
return _engine
Наконец, SQL_DB_URI и SQL_DB_ECHO в конфигурационном модуле:
SQL_DB_URL = 'postgresql+psycopg2://%s:%[email protected]%s/%s' % (
POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_HOST, POSTGRES_DB_NAME)
SQL_DB_ECHO = False