#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. Вы в конечном итоге нашли ответ на этот вопрос самостоятельно?