Python信号阻塞与数据库
我有一个关于信号的问题,主要是当有SQL命令在运行时,这些信号是怎么处理的。具体来说,我有一个Python脚本,它作为一个进程在运行,里面又创建了另一个进程。接着会进行一个数据库检查,在这个检查中,会修改一个表的NULLEGE属性。我得说,这个表非常大……大到GB级别,而且还在不断增大。
当我给主进程(也就是运行数据库检查的那个进程)发送一个终止信号时,里面创建的第二个进程也应该结束。通常情况下,这个情况是成立的,除了在数据库检查修改NULLEGE属性的时候。在这个操作进行时,主进程会终止,但信号处理器似乎被忽略了(没有进入处理信号的函数),因此没有向主进程内部创建的进程发送SIGTERM信号。结果就是我留下了一个卡住的进程。
我的问题是:有没有办法在数据库检查进行时阻塞信号(也就是把信号排队)?或者有没有其他方法可以用Python向第二个进程发送TERM信号?我已经成功修改了启动Python脚本的bash脚本,让它在主进程终止后检查并发送SIGTERM给剩下的进程……但我更希望不通过这种方式来处理。
或者有没有办法中断数据库检查?
附注:在Python 2.6的Ubuntu Linux上使用SQLAlchemy进行数据库处理。
1 个回答
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