Правильный способ обработки сеанса SQLAlchemy в celery

#python #sqlalchemy #celery

#python #sqlalchemy #сельдерей

Вопрос:

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

Допустим, у меня есть celery.py определите, как показано ниже:

celery.py

 from __future__ import absolute_import

from celery import Celery

from sqlalchemy import create_engine
from sqlalchemy.orm import (
    scoped_session,
    sessionmaker,
    )

DBSession = scoped_session(sessionmaker())

from celery.signals import worker_init
@worker_init.connect
def bootstrap(signal, sender):
    engine = create_engine('postgresql://hello:world@localhost/db')
    DBSession.configure(bind=engine)

celery = Celery(include=[
            'tasks',
            ])
celery.config_from_object('celeryconfig')
celery.settings=None

if __name__ == '__main__':
    celery.start()
  

Я не уверен, следует ли использовать scoped_session, я видел несколько примеров его использования, но я думаю, что Сельдерей не имеет никакого отношения к области видимости?

Вопрос 1. Какой сеанс я должен использовать?

Вопрос 2. Должен ли я использовать сигинальный worker_init_init ? Или просто использовать сеанс на уровне модуля?

После создания сеанса, как мы на самом деле освобождаем / удаляем / закрываем его?

tasks.py

 from .celery import celery, DBSession

@celery.task
def do_task():
    DBSession.query(some_object).all()
    #some logics
    DBSession.commit()
    DBSession.remove()
  

Влияет ли scoped_session на то, какую функцию использовать?

Любая помощь будет с благодарностью. Заранее спасибо.

Комментарии:

1. Вы в конечном итоге нашли ответ на этот вопрос самостоятельно?