python,信号阻塞,数据库

时间:2011-05-13 11:42:06

标签: python mysql linux sqlalchemy signals

我有一个关于信号的问题以及在运行sql命令时如何处理它们。特别是,我有一个作为一个进程运行的python脚本,在其中正在创建另一个进程。之后,正在运行数据库检查,并在该数据库内部检查表列NULLEGE属性是否正在被更改。我必须说桌子相当大......就像在GB中那样大而且它变大了。 当我发送一个术语信号发送到主进程(运行数据库检查的那个)时,在该主进程内创建的第二个进程也应该终止。好吧......当数据库检查正在进行NULLEGE属性更改时,总是发生这种情况。当正在完成时,主进程终止,但不知何故信号处理程序被忽略(不进入处理信号的函数),因此没有SIGTERM被发送到在主要进程内创建的进程。这就是我被遗弃的过程。

我的问题:有没有办法在运行数据库检查时阻止信号(如在排队中)或是否有另一种方法使用python将TERM信号发送到第二个进程?我已成功更改了启动python脚本的bash脚本作为进行检查的过程,并在主进程终止后将SIGTERM发送到左进程...但我不希望这样处理它。

还是有办法打断数据库检查?

ps:对于数据库处理,sqlalchemy正在ubuntu linux上的python 2.6下使用。

1 个答案:

答案 0 :(得分:0)

您的MySQL命令是一个C调用,它会阻止Python解释器。

最简洁的方法可能是在发送TERM之前使用mysql或mysql-python中的“show processlist”和“kill”命令。

见这里: http://www.techrepublic.com/article/how-to-examine-and-kill-mysql-client-processes/5211762