Задача Celery не выполняется на полпути при извлечении данных из большой базы данных - PullRequest
1 голос
/ 03 апреля 2019

Я выполняю периодическое задание с использованием сельдерея в приложении django-rest, которое извлекает данные из большой базы данных Postgres с несколькими таблицами, задание запускается хорошо и извлекает некоторые данные в течение примерно 50 минут, а затем завершается с ошибкой

client_idle_timeout
server closed the connection unexpectedly, This probably means the server terminated abnormally before or while processing the request.

В чем может быть проблема, вызывающая это, и как я могу это исправить?

1 Ответ

0 голосов
/ 04 апреля 2019

Скорее всего, это означает, что ваш PostgreSQL имеет ограничение на продолжительность транзакции (бездействие в транзакции) или длительность сеанса (время ожидания сеанса).

Это, вероятно, происходит из-за типичного, неправильного способа работы с базами данных (я видел, что это делали даже старшие разработчики) - процесс создает сеанс базы данных, а затем начинает выполнять некоторую бизнес-логику, которая может занять много времени для конец, в то время как данные БД были либо частично обновлены, либо вставлены. Код, написанный таким образом, обречен на неудачу из-за тайм-аутов, установленных PostgreSQL.

...