Session 延迟芹菜任务中的SQLAlchemy会话处理

Session 延迟芹菜任务中的SQLAlchemy会话处理,session,sqlalchemy,task,celery,Session,Sqlalchemy,Task,Celery,我通过SQLAlchemy使用关系数据库。我想创造一个使用芹菜处理数据库的工作。有一个代码: from sqlalchemy.orm.session import Session from celery.task import task from myapp.user import User @task def job(user): # job... session = Session.object_session(user) with user.begin():

我通过SQLAlchemy使用关系数据库。我想创造一个使用芹菜处理数据库的工作。有一个代码:

from sqlalchemy.orm.session import Session
from celery.task import task
from myapp.user import User

@task
def job(user):
    # job...
    session = Session.object_session(user)
    with user.begin():
        user.value = result_value

def ordinary_web_request_handler(uid):
    assert isinstance(session, Session)
    user = session.query(User).get(int(uid))
    # deals with user...
    job.delay(user)
    return response
我需要在延迟的
作业中使用SQLAlchemy会话,但是还没有
会话。如何将会话设置为已传递的
用户
实体

我有很多想法,但我不确定哪一种(或没有一种)是最佳实践:

  • 始终仅传递主键,并通过传递的主键检索新实例
  • 设置所传递实例的会话(但我不知道如何设置)
  • 不要在延迟的任务中使用ORM

您应该能够使用工作信号启动会话:


如果您使用类似单例的模式来确保该线程中始终有可用的会话,那么一切都应该正常工作。

您应该能够使用工作信号启动会话:

如果您使用类似单例的模式来确保该线程中始终有可用的会话,那么一切都应该正常工作