【发布时间】:2019-05-06 22:08:57
【问题描述】:
我使用pymysql连接mysql,连接时设置了read_timeout:
conn = pymysql.connect(host=host,port=port,user=user,passwd=passwd,read_timeout=60)
我的查询代码在这里:
try:
cur.execute(sql)
rows = cur.fetchall()
except:
# timeout
logging.error()
finally:
cur.close()
conn.close()
当我执行长时间查询时,代码引发超时错误,最后cursor和connection都关闭(我调试conn._closed以确认连接已关闭)。但是当我登录到mysql并show processlist,发现进程还活着。
我的问题是,这是否正常?当我的代码中的查询超时时,如何终止进程?我想出了一个在查询之前执行set session max_execution_time=60 的解决方法,但我认为这不是最佳做法。
这里是show processlist的输出,我用sleep表示长时间查询,我想结果是一样的,connection在我的代码中被关闭了,但是进程还在。
【问题讨论】:
-
显示来自
show processlist的输出 -
嗨@rdas我做了一个补充
-
不要将文字作为图片发布