我的芹菜任务大约需要6个小时。最后,Django(或可能是Celery)引发了一个异常“ MySQL服务器已消失”。
经过阅读后,看来这是长任务的已知问题。我(认为我可以)无法控制ping或执行其他任务;但是在花费时间的调用完成后会引发异常(但仍在task函数中)。
我可以在函数中进行调用以重新建立连接吗?
(我已经使用相同的RDS MySQL数据库在“本地”运行了此任务,但没有出现问题,但是在AWS实例上运行时得到了它。)
答案 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调用-确保否则连接将无法工作。
伊恩