【问题标题】:python, signal blocking, databasespython, 信号阻塞, 数据库
【发布时间】:2011-08-24 21:11:07
【问题描述】:

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

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

或者有没有办法中断数据库检查?

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

【问题讨论】:

    标签: python mysql linux sqlalchemy signals


    【解决方案1】:

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

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

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

    【讨论】:

    • 好吧,有人提出将数据库检查分叉到子进程中的想法,从而结束了我的问题。但我会查看您的链接并尝试了解其中的内容。谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2016-05-24
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多