Есть класс, принимающий объект, который необходимо добавить на удаление в сессию sqlalchemy.
Если реализовать этот класс в рамках текущего треда, никаких проблем не возникает:
from ..extensions import db
# db = SQLAlchemy()
class Remover(object):
"""docstring for Remover"""
def __init__(self, obj):
super(Remover, self).__init__()
self.obj = obj
self.remove()
def remove(self):
try:
db.session.delete(self.obj)
db.session.commit()
except Exception, e:
raise e
u = User().query.first()
Remover(u)
Но необходимо сделать, что бы добавление объекта в сессию и commit, происходили не сразу, а через n секунд. Для этого, в новом треде, я создаю таймер, по истечении которого выполняется метод
remove()
from threading import Timer
from ..extensions import db
# db = SQLAlchemy()
class Remover(object):
"""docstring for Remover"""
def __init__(self, obj):
super(Remover, self).__init__()
self.obj = obj
self.t = Timer(7, self.remove)
self.t.start()
def remove(self):
try:
db.session.delete(self.obj)
db.session.commit()
except Exception, e:
raise e
def cancel(self):
self.t.cancel()
u = User().query.first()
Remover(u)
В этом случае выбрасывается исключение:
RuntimeError: application not registered on db instance and no application bound to current context
Подскажите пожалуйста, как правильно работать с контекстами из дополнительных тредов, что бы появилась возможность грамотно реализовать описанный класс?