Обработка сеанса SQLAlchemy в отложенных задачах Celery - PullRequest
1 голос
/ 07 ноября 2011

Я использую реляционную базу данных через 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

Мне нужно использовать сеанс SQLAlchemy в отложенном job, но session пока нет.Как я могу установить сеанс в переданную user сущность?

Есть способы, о которых я подумал, но я не уверен, какой из этих (или ни один из них) является лучшим:

  • Всегда передавать только первичные ключи и получать новые экземпляры по переданным первичным ключам.
  • Установить сеанс пропущенных экземпляров (но я не знаю, как).
  • Не использоватьORM в отложенном задании.

1 Ответ

1 голос
/ 07 ноября 2011

Вы должны иметь возможность начать сеанс с рабочими сигналами: http://celery.readthedocs.org/en/latest/userguide/signals.html#worker-signals

Если вы используете одноэлементный шаблон, чтобы убедиться, что у вас всегда есть сеанс в этом потоке, чем все должно работатьхорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...