我在一个项目中使用PostgreSQL和SQLAlchemy,该项目包含一个启动子进程的主进程.所有这些进程都通过SQLAlchemy访问数据库.
我遇到了可重复的连接失败:前几个子进程正常工作,但一段时间后出现连接错误.这是一个MWCE:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, create_engine
from sqlalchemy.orm import sessionmaker
DB_URL = 'postgresql://user:password@localhost/database'
Base = declarative_base()
class Dummy(Base):
__tablename__ = 'dummies'
id = Column(Integer, primary_key=True)
value = Column(Integer)
engine = None
Session = None
session = None
def init():
global engine, Session, session
engine = create_engine(DB_URL)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
def cleanup():
session.close()
engine.dispose()
def target(id):
init()
try:
dummy = session.query(Dummy).get(id)
dummy.value += 1
session.add(dummy)
session.commit()
finally:
cleanup()
def main():
init() …Run Code Online (Sandbox Code Playgroud) 我在这个代码片段中遇到"解密失败或错误记录mac"错误:
conn = psycopg2.connect(...)
cursor = conn.cursor()
cursor.execute("SELECT id, ip FROM schema.table;")
rows = cursor.fetchall()
cursor.close()
conn.commit()
conn.close()
Run Code Online (Sandbox Code Playgroud)
这在Thread的run()方法中调用,在while(True)循环中多次调用.我只是使用psycopg2驱动程序打开与PostgreSQL数据库的连接.
在Python中打开数据线连接到线程的安全性是什么?我不知道是什么引起了这个错误.
python encryption postgresql multithreading database-connection
我有一个作为守护进程运行的Python脚本.在启动时,它会生成5个进程,每个进程都连接到Postgres数据库.现在,为了减少数据库连接的数量(最终会变得非常大),我试图找到一种跨多个进程共享单个连接的方法.为此我正在寻找multiprocessing.sharedctypes.ValueAPI.但是,我不确定如何psycopg2.connection跨进程使用此API 传递对象.谁能告诉我怎么做?
我也愿意接受其他想法以解决这个问题.
我没有考虑将连接作为构造函数的一部分传递给5个进程的原因是互斥处理.如果我遵循这种方法,我不确定如何防止多个进程访问连接.谁能告诉我这是否是正确的做法?