У меня есть длительная задача, которая обновляет некоторые объекты SQLAlchemy. Сессия открывается в начале задачи, обновления производятся по пути, и транзакция фиксируется в конце. Проблема в том, что задача выполняется очень долго, поэтому соединение будет закрыто (по тайм-ауту, «ушло», как бы вы это ни называли), прежде чем произойдет коммит. Это приведет к сбою фиксации и сбою всей задачи.
Кажется, это абсолютно правильный способ записи в БД для коротких задач или вещей, не связанных с Celery. Но это, безусловно, проблема, если задачи занимают слишком много времени.
Есть ли другой рекомендуемый шаблон? Должна ли задача Celery даже не использовать объекты SQLAlchemy, а вместо этого использовать какой-то класс stati c, данные которого можно использовать для обновления реальных объектов SQLAlchemy, может быть, только в конце задачи? Это единственно возможное решение, которое я нашел. Я хотел бы знать, есть ли другие или у моей идеи есть другие проблематичные c значения.