首页 > 解决方案 > 操作错误:现有连接被远程主机强行关闭。(10054)

问题描述

我收到此操作错误,可能是在应用程序长时间不活动或空闲时定期出现。刷新页面时它会消失。我在 Formhandlers 和 gramex 的 DbAuth 中使用 mssql pyodbc 连接字符串(“mssql+pyodbc:///?odbc_connect= ...”)

如何在 gramex 中保持连接有效?

错误截图

标签: sql-serverpyodbcgramex

解决方案


添加pool_pre_pingpool_recycle参数。

  • pool_pre_ping每次从池中签出连接时,通常会发出等效于“SELECT 1”的 SQL;如果出现一个被检测为“断开”情况的错误,连接将立即被回收。阅读更多
  • pool_recycle防止池使用已超过特定年龄的特定连接。阅读更多

例如:engine = create_engine(connection_string, encoding='utf-8', pool_pre_ping=True, pool_recycle=3600)

或者,您可以将这些参数添加到 FormHandler 中gramex.yaml。这仅对带有连接字符串的第一个 FormHandler 是必需的。

kwargs:
 url: ...
 table: ...
 pool_pre_ping: True
 pool_recycle: 60

推荐阅读