SqlAlchemyを使用してデータベースのバックエンドに接続し、Pythonアプリケーションでマルチプロセッシングを頻繁に使用します。私は、データベースクエリの結果であるオブジェクト参照をあるプロセスから別のプロセスに渡す必要がある状況に遭遇しました。SqlAlchemyとマルチプロセッシング
SqlAlchemyは、オブジェクトの属性にアクセスすると、そのオブジェクトが他のプロセスの現在のセッションに再接続しようとするため、問題が発生します。これは、オブジェクトが他のセッションに接続されているため例外が発生します。
InvalidRequestError: Object '<Field at 0x9af3e4c>' is already attached to session '148848780' (this is '159831148')
この状況を処理する方法は何ですか?オブジェクトを最初のセッションから切り離したり、オブジェクトをORM関連のものなしで複製することは可能ですか?
:
私は辞書にそれらを妨害、あなたはそのオブジェクトのうち、必要な属性を取る示唆して はmultprocessingパイプを使用してプロセス間でそれを送っているあなたにオブジェクトをマージしてみました新しいセッション? http://www.sqlalchemy.org/docs/orm/session.html#merging –
session.expunge(obj)は、sqlalchemyがobjを忘れるようにします。ただし、後でobjを変更すると、変更はデータベースにコミットされなくなります。 maksymkoの提案は確かに良いです。 – Simon
オブジェクトの属性は、別のデータベースにオブジェクトが格納されていますか?たとえば、それは外部キーかBLOBですか? –