簡體   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