我想将一个SQLAlchemy对象从一个线程传递给另一个线程。该对象在数据库中是持久的,但我不需要在另一个线程中修改它。阅读文档看起来我需要在传递之前使用make_transient
。这是有效的,除了一个不寻常的怪癖 - 我传递的对象是多态的。似乎对象的多态属性在另一个线程中显示为None
,除非它们在传递之前被访问。所以我有一个解决方法,但我想我做错了。
myobject = session.query(MyObject).first()
myobject.someattribute # without this, assert fails
make_transient(myobject)
# magic to pass to another thread
assert(myobject.someattribute is not None)
我正在使用PySide,所以线程是使用QtCore.QThread
完成的,但我认为这不重要。