背景:
我正在使用数据视图,并且许多报告都是由运行时间很长的查询生成的。我已经在python中编写了一个小的查询缓存守护程序,该守护程序接受一个查询,生成一个线程来运行它,并在完成后将其存储为腌制的字符串。结果通常是按月或其他因素分解的各种聚合,因此结果集不大。因此,我的缓存守护程序可以检查它是否已经有结果,并立即将其返回,否则它将发送回“待处理”消息(或“错误”或“失败”或其他各种消息)。关键是,作为django Web服务器的客户端将在5到10秒内返回“待定”并再次查询,同时向用户显示一条消息,指出“您的报告正在构建中,请耐心等待” '。
问题:
我想为用户添加取消长时间运行的查询的功能,前提是尚未将其缓存。我知道我可以使用KILL
杀死MySQL中的查询线程,但是有没有办法像获取最后插入的行的ID一样获取查询的线程/查询/进程ID?我正在通过python MySQLdb模块执行此操作,但看不到任何会返回此值的游标对象的属性/方法。
最佳答案
连接对象有一个名为thread_id
的属性,该属性返回要传递给KILL的ID。 MySQL对每个连接(而不是每个游标)都有一个线程,因此您不是在杀死查询,而是在杀死连接。要终止单个查询,您必须在其自己的连接中运行每个查询,然后使用thread_id
的结果终止连接
关于python - 使用python mysqldb获取mysql中最近运行的查询的(查询/线程的)进程ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12743436/