|
@@ -39,6 +39,14 @@ def get_engine():
|
|
|
pool_recycle=settings.mysql_pool_recycle_seconds,
|
|
pool_recycle=settings.mysql_pool_recycle_seconds,
|
|
|
pool_pre_ping=True,
|
|
pool_pre_ping=True,
|
|
|
echo=settings.mysql_echo,
|
|
echo=settings.mysql_echo,
|
|
|
|
|
+ # pymysql 默认 read/write timeout 为 None(永不超时):一旦锁等待或网络抖动,
|
|
|
|
|
+ # 查询会在 socket.recv() 上永久阻塞,且这类同步阻塞无法被 asyncio 超时取消。
|
|
|
|
|
+ # 这里显式加 socket 级超时,确保任何一次查询最多阻塞有限时间就会抛异常。
|
|
|
|
|
+ connect_args={
|
|
|
|
|
+ "connect_timeout": settings.mysql_connect_timeout_seconds,
|
|
|
|
|
+ "read_timeout": settings.mysql_read_timeout_seconds,
|
|
|
|
|
+ "write_timeout": settings.mysql_write_timeout_seconds,
|
|
|
|
|
+ },
|
|
|
)
|
|
)
|
|
|
if _engine.dialect.name == "mysql":
|
|
if _engine.dialect.name == "mysql":
|
|
|
event.listen(_engine, "connect", _set_mysql_session_china_time)
|
|
event.listen(_engine, "connect", _set_mysql_session_china_time)
|