Длинная задача сельдерея вызывает таймаут MySQL в Django - опции? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть задание на сельдерей, которое занимает около 6 часов. В конце концов, Django (или, возможно, Celery) создает исключение «сервер MySQL ушел».

После прочтения выясняется, что это известная проблема с длинными задачами. Я не (думаю, что у меня) контроль над пингом или иным образом посредственным заданием; но исключение возникает после завершения вызова, который занимает некоторое время (но все еще внутри функции задачи).

Могу ли я сделать звонок в функции, чтобы восстановить соединение?

(Я выполнил эту задачу «локально» с той же БД MySQL RDS, и у меня не было этой проблемы, но я получаю ее при работе на экземпляре AWS.)

1 Ответ

0 голосов
/ 16 июня 2019

В конце концов нашел то, что сработало:

from django.db import close_old_connections
import time

def check_and_retry_django_db_connection():
    close_old_connections()

    db_conn = False
    while not db_conn:
        try:
            connection.ensure_connection()
            db_conn = True
        except OperationalError:
            print('Database unavailable, waiting 1 second...')
            time.sleep(1)

    print('Database available')

Ключом является вызов close_old_connections - в противном случае sure_connection работать не будет.

Ian

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...