0

背景:

我正在研究数据视图,许多报告都是由运行时间很长的查询生成的。我在 python 中编写了一个小型查询缓存守护程序,它接受查询,产生一个线程来运行它,并在完成后将结果存储为腌制字符串。结果通常是按月或其他因素分解的各种聚合,因此结果集并不大。所以我的缓存守护进程可以检查它是否已经有结果,并立即返回,否则它会发回“待处理”消息(或“错误”或“失败”或各种其他消息)。关键是,作为 django Web 服务器的客户端将在 5~10 秒内返回“待处理”并再次查询,同时向用户发送一条消息,说“您的报告正在构建中,请耐心等待'。

问题:

我想为用户添加取消长时间运行的查询的功能,假设它还没有被缓存。我知道我可以使用 杀死 MySQL 中的查询线程KILL,但是有没有办法以类似于获取最后插入行的 id 的方式获取查询的线程/查询/进程 id?我正在通过 python MySQLdb 模块执行此操作,但我看不到任何会返回此值的游标对象的属性/方法。

4

1 回答 1

2

连接对象有一个名为 的属性thread_id,它返回一个要传递给 KILL 的 id。MySQL 为每个连接而不是每个游标都有一个线程,因此您不是在终止查询,而是在终止连接。要终止单个查询,您必须在其自己的连接中运行每个查询,然后使用来自的结果终止连接thread_id

于 2012-10-05T09:32:06.363 回答