在 5 分钟的响应时间后在 PythonAnywhere 中出现错误 504-loadbalancer(网关超时),即使 SQLALCHEMY_POOL_RECYCLE = 600

Getting error 504-loadbalancer (Gateway Time-out) in PythonAnywhere after a response time of 5 minutes, even though SQLALCHEMY_POOL_RECYCLE = 600

所以我调用 SPOTIPY API 将用户歌曲、专辑、艺术家和 user_info 添加到数据库。插入的记录总数约为 4,000。数据库将更新,但是 5 分钟后(response_time = 300 秒)HTML 页面将抛出负载平衡错误。此错误后数据库继续更新,但我的网页卡在错误屏幕上。

在访问日志中,抛出错误时我得到以下信息:

24.154.122.253 - - [23/Apr/2021:19:21:15 +0000] "POST /uploadFile HTTP/1.1" 499 0 "https://spotify365.pythonanywhere.com/upload" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36" "24.154.122.253" response-time=300.003

虽然在引发错误时数据库可能尚未完成,但它最终会在几分钟后完成,这让我相信,如果我可以增加 Flask Apps 响应时间,那么我的程序应该可以运行。

为了增加 flask_app 的响应时间,我尝试了:

app.config["SQLALCHEMY_POOL_RECYCLE"] = 600

但这并没有帮助,这让我尝试修改 Spotify 客户端的超时和重试限制:

spotify = spotipy.Spotify(client_credentials_manager=client_credentials_manager, requests_timeout=600, retries = 2)

这应该将 Spotipy API 请求的超时设置为 600 秒,并且请求重试最多 2 次。但是我不认为这是问题所在,因为数据库确实是完全创建的

如果 PythonAnywhere 上的请求在 5 分钟后仍未完成,PythonAnywhere 会假定 Web 应用程序以某种方式损坏并重新启动它。

SQLALCHEMY_POOL_RECYCLE 与请求超时无关。是关于数据库的连接。