如何在mysql 5.6版中支持命令超时?我正在寻找一个CommandTimeout选项,它与ADO.NET类似,但使用python

2024-10-04 11:34:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,希望在mysql(5.6)中实现ADO.NET CommandTimeout属性的功能(设置查询的执行时间)

我正在寻找默认情况下支持它的任何内置python库(我已经尝试过pymysql、pyodbc和mysql.connector),或者最好的方法是什么,以防我不得不从头发明轮子

我正在使用一个旧的mysql版本(5.6),我之所以强调这一点,是因为通过研究,我发现这可以通过使用以下命令在mysql 5.7以后的版本中实现

SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;

我已经通过了一些参考链接,这些链接提出了mysql 5.7及更高版本的解决方案: http://mysqlserverteam.com/server-side-select-statement-timeouts/https://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html#optimizer-hints-execution-time

但是我正在寻找mysql5.6中的解决方案,提前谢谢


Tags: 版本comnettime链接mysql解决方案max
1条回答
网友
1楼 · 发布于 2024-10-04 11:34:08

因此,我最终能够通过创建一个线程/进程来解决这个问题,该线程/进程基于计时器进行调用,如下所示:

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))

相关问题 更多 >