繁体   English   中英

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

[英]Long celery task causes MySQL timeout in Django - options?

我有芹菜任务,大约需要6个小时。 最后,Django(或可能是Celery)提出异常“MySQL服务器已经消失”。

在做了一些阅读之后,看来这是一个长期任务的已知问题。 我(我认为没有)控制ping或其他任务; 但是在需要时间的调用完成后(但仍在任务函数内)之后引发异常。

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

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

最终找到了似乎有效的方法:

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调用 - 否则ensure_connection将不起作用。

伊恩

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM