长时间的芹菜任务导致Django中的MySQL超时-选项?

时间:2019-06-06 18:45:53

标签: python django celery

我的芹菜任务大约需要6个小时。最后,Django(或可能是Celery)引发了一个异常“ MySQL服务器已消失”。

经过阅读后,看来这是长任务的已知问题。我(认为我可以)无法控制ping或执行其他任务;但是在花费时间的调用完成后会引发异常(但仍在task函数中)。

我可以在函数中进行调用以重新建立连接吗?

(我已经使用相同的RDS MySQL数据库在“本地”运行了此任务,但没有出现问题,但是在AWS实例上运行时得到了它。)

1 个答案:

答案 0 :(得分:0)

最终找到了可行的方法:

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调用-确保否则连接将无法工作。

伊恩