を処理する方法を私たちは、単一の長命のセッションでのQtを使用するアプリケーションとSQLAlchemyのパイソンを開発しています。 dbから読み込んだオブジェクトの中には、長生きしているものもあり、Qtシグナルを送信して変更を通知します。これが機能するために、我々は、カスタムメタクラスで、二重継承を使用して@orm.reconstructor
からQObjectの基本クラスを初期化:PyQtは信号とSQLAlchemyのは:適切にオブジェクトの有効期限
class LongLived(QObject, Base):
__metaclass__ = DeclarativeQObjectMeta
# ... column declarations ...
something_changed = pyqtSignal(object)
@orm.reconstructor
def init_on_load(self):
QObject.__init__(self)
このアプローチの問題は、それが持っていた後、誰かがオブジェクトにアクセスするたびinit_on_load
が呼び出されるということです(つまり、すべてのコミット後に)期限切れです。これは、QObjectを再初期化します。このQObjectは、プロセス内のすべての信号接続を終了させるようです。
(expire_on_commit=False
を設定以外の)有効期限が切れてオブジェクトに接続PyQtは信号/スロットを維持するための適切な方法は何ですか? SQLAlchemyのとQt/PyQtは以来