Использование объектов SQLAlchemy в длительной задаче Celery - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть длительная задача, которая обновляет некоторые объекты SQLAlchemy. Сессия открывается в начале задачи, обновления производятся по пути, и транзакция фиксируется в конце. Проблема в том, что задача выполняется очень долго, поэтому соединение будет закрыто (по тайм-ауту, «ушло», как бы вы это ни называли), прежде чем произойдет коммит. Это приведет к сбою фиксации и сбою всей задачи.

Кажется, это абсолютно правильный способ записи в БД для коротких задач или вещей, не связанных с Celery. Но это, безусловно, проблема, если задачи занимают слишком много времени.

Есть ли другой рекомендуемый шаблон? Должна ли задача Celery даже не использовать объекты SQLAlchemy, а вместо этого использовать какой-то класс stati c, данные которого можно использовать для обновления реальных объектов SQLAlchemy, может быть, только в конце задачи? Это единственно возможное решение, которое я нашел. Я хотел бы знать, есть ли другие или у моей идеи есть другие проблематичные c значения.

...