Flask / SqlAlchemy,Flask-Cache,Celery和InvalidRequestError:Instance'< ...>'在本次会议中并不持久

时间:2015-02-10 20:44:06

标签: python caching celery flask-sqlalchemy flask-cache

我在这个问题上摸不着头脑。

我有一个Flask App w / Flask-Cache和SqlAlchemy:

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+pg8000://[Redacted]
cache = Cache(app, config={'CACHE_TYPE':'redis', 'CACHE_REDIS_URL':'[Redacted]'})
db = SQLAlchemy(app)

芹菜工人:

@worker_process_init.connect
def init_worker(**kwargs):
    global db_session
    print('Initializing database connection for worker.')
    db_session = database.get_session()


@worker_process_shutdown.connect
def shutdown_worker(**kwargs):
    global db_session
    if db_session.is_active:
        print('Closing database connectionn for worker.')
        db_session.close()

一个通用的get_or_create def:

@cache.cached(timeout=200, key_prefix="get_or_create")
def get_or_create(model, **kwargs):
    instance = model.query.filter_by(**kwargs).first()
    if instance:
        return instance
    else:
        instance = model(**kwargs)
        db_session.add(instance)
        return instance

我正在尝试使用缓存来解决多处理导致的UniqueConstraint违规(即当两个工人同时插入非唯一对象时,当第一个插入后应该更新)

工人正在喷涌

  

InvalidRequestError:Instance'< [Redacted]>'在本届会议中不持久

我能想出的最好的是我需要扩展会话的范围吗?

0 个答案:

没有答案