我对信号以及在运行 sql 命令时如何处理信号有疑问。特别是,我有一个作为进程运行的 python 脚本,并且在其中正在创建另一个进程。之后将运行数据库检查,并在该数据库中检查表列 NULLEGE 属性是否正在更改。我必须说那张 table 相当大……就像 GB 一样大,而且越来越大。 当我向主进程(运行数据库检查的进程)发送一个术语信号时,在该主进程中创建的第二个进程也应该终止。好吧......当数据库检查正在执行该 NULLEGE 属性更改时,这种情况总是会发生。完成后,主进程终止但不知何故信号处理程序被忽略(不进入处理信号的函数),因此没有 SIGTERM 被发送到在主进程中创建的进程。这就是我被困在一个过程中的原因。
我的问题:是否有一种方法可以在运行数据库检查时阻止信号(如排队),或者是否有另一种使用 python 将 TERM 信号发送到第二个进程的方法?我已经成功地改变了启动 python 脚本的 bash 脚本作为一个进程来进行检查并在主进程终止后将 SIGTERM 发送到左侧进程......但我不想以这种方式处理它。
或者是否有中断数据库检查的方法?
ps: 对于数据库处理,sqlalchemy 在 ubuntu linux 上的 python 2.6 下使用。
最佳答案
您的 MySQL 命令是一个 C 调用,它会阻塞 Python 解释器。
最干净的方法可能是在发送 TERM 之前使用 mysql 或 mysql-python 的“show processlist”和“kill”命令。
看这里: http://www.techrepublic.com/article/how-to-examine-and-kill-mysql-client-processes/5211762
关于python, 信号阻塞, 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5991345/