我是python的新手,想在mysql(5.6(中做ADO.NET CommandTimeout属性所做的事情(设置查询的执行时间(。
我正在寻找任何可以默认支持它的内置python库(我已经尝试过pymysql、pyodbc和mysql.connector(,或者最好的方法是什么,以防我不得不从头开始发明轮子。
我使用的是一个旧的mysql版本(5.6(,我之所以强调这一点,是因为在研究中我发现,通过使用以下命令,这可以在mysql5.7以后的版本中实现
SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;
我已经浏览过的参考链接建议在mysql5.7及以上版本中使用一个解决方案:http://mysqlserverteam.com/server-side-select-statement-timeouts/https://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html#optimizer-提示执行时间
但我正在mysql中寻找一个解决方案5.6,提前感谢。
所以我终于能够解决这个问题,通过创建一个基于计时器调用的线程/进程,如下所示:
query_monitoring_thread = threading.Timer(self.__command_timeout, self.kill_query,
args=[mydb.connection_id, source])
线程将获取当前用户创建的所有进程,并且当前用户执行的时间超过命令超时时间,并杀死存在的进程:
cursor.execute(
"Select Id From Information_Schema.Processlist where Id={0} AND User='{1}' AND Time >= {2}".format(
conn_id, conn.user, self.__command_timeout))
records = cursor.fetchall()
if len(records) > 0:
cursor.execute('Kill query ' + str(conn_id))