我通过SQLAlchemy使用关系数据库。我想使用Celery生成一个处理数据库的工作。有一个代码:
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
我需要在延迟job
中使用SQLAlchemy会话,但还没有session
。如何将会话设置为传递user
实体?
我想到了一些方法,但我不确定这些中的哪一个(或者没有一个)是最佳实践:
答案 0 :(得分:1)
您应该能够使用工作人员信号启动会话:http://celery.readthedocs.org/en/latest/userguide/signals.html#worker-signals
如果你使用类似单身的模式来确保你在该线程中总是有一个会话,那么一切都应该可以正常工作。