[英]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.