python, 信号阻塞, 数据库

标签 python mysql linux sqlalchemy signals

我对信号以及在运行 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/

相关文章:

php - foreach 循环和 SQL (PDO) 的问题

java - 在 Linux 上运行 selenium WebDriver jar 时出错(在 Windows 上工作正常)

c++ - 如何在 Linux 发行版上将 SFML C++ 源代码从 Linux 编译到 Windows?

windows - 在 Windows 下使用 Linux 实用程序的最佳方法是什么?

python - 如何获取 current_app 以便在多部署可重用 Django 应用程序中反向使用?

mysql - 此查询显示 #1248 - 每个派生表必须有自己的别名

python - 字典、列表或集合末尾的额外逗号在 Python 中有什么特殊含义吗?

Mysql - 移动和替换列

如果div类标题文本包含 "English",Python 3 BeautifulSoup获取URL(href或baseURL)

python - 在 Pandas 的多列中使用 NaN 值