Я застрял с этой проблемой SQLAlchemy-Python: вот класс, который должен выполнять простую работу по обновлению в нескольких потоках
class InThreadUpdater():
def __init__(self):
self.portion_size = 5
self.select_portion_func = db.session.query(FBPostStats).with_lockmode("update").limit(self.portion_size)
def run(self):
for post in self.select_portion_func.all():
post.locked_by_thread = True
db.session.commit()
if __name__ == "__main__":
updater = InThreadUpdater()
thread = threading.Thread(target=updater.run)
Но после завершения никаких реальных изменений, внесенных в dbЭто работает, если я перенесу инициализацию члена select_portion_func
в функцию run()
следующим образом
def run(self):
self.select_portion_func = db.session.query(FBPostStats).with_lockmode("update").limit(self.portion_size)
for post in self.select_portion_func.all():
post.locked_by_thread = True
db.session.commit()
В чем разница между этими двумя вариантами?Почему первый дает какую-то копию для post
?
Заранее спасибо!