2011-05-13 80 views
2

我有一个关于信号的问题,以及在运行sql命令时如何处理它们。特别是,我有一个python脚本作为一个进程运行,并在里面创建另一个进程。之后,正在运行数据库检查,并在该数据库内检查表列NULLEGE属性是否正在更改。我必须说,桌子是相当大的......如GB大,而且它变得更大。 当我发送一个术语信号给主进程(运行数据库检查的进程)时,在主进程中创建的第二个进程也应该终止。好吧......在数据库检查正在进行NULLEGE属性更改时,始终会发生这种情况。当这个过程结束时,主进程终止,但是信号处理程序被忽略(不进入处理信号的函数),因此没有SIGTERM被发送到主进程内创建的进程。这就是我如何留下一个卡住的过程。python,信号阻塞,数据库

我的问题:有没有办法阻止信号(如排队他们),而数据库检查正在运行或有另一种方式发送TERM信号到第二个进程使用python?我已经成功地改变了启动python脚本的bash脚本作为一个进程来做一个检查,并在主进程结束后向左进程发送SIGTERM ......但是我不想用这种方式处理它。

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

ps:用于数据库处理sqlalchemy正在Ubuntu下的Python 2.6下使用。

回答

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

+0

也有人想出了建立该数据库检查到一个子进程,并从而结束了我的问题的想法。但我会看看你的链接,并试图了解那里有什么。谢谢您的回答。 – John11 2011-05-17 10:31:42