如何在终止Python脚本时进行清理

2 投票
2 回答
4121 浏览
提问于 2025-04-16 00:16

我有一个用Python写的脚本,它可以完成一些工作。我使用了 multiprocessing.Pool 来让几个工作进程帮我执行命令。

我遇到的问题是,当我想结束这个脚本时。当我按下 Ctrl-C 时,我希望每个工作进程能立刻清理它们的实验(这包括一些自定义代码,实际上甚至是一个子进程命令,而不仅仅是释放锁或内存),然后停止。

我知道我可以通过信号处理器来捕捉 Ctrl-C。那么,我该如何让 multiprocessing.Pool 中所有正在运行的工作进程在终止时,仍然能执行它们的清理命令呢?

Pool.terminate() 是不行的,因为这样会直接结束进程,而不进行任何清理。

2 个回答

1

你在使用Unix系统吗?如果是的话,为什么不在子进程中捕捉SIGTERM信号呢?实际上,Process.terminate()的说明中提到:

Terminate the process. On Unix this is done using the SIGTERM signal

(我还没有测试过这个。)

2

你可以试试atexit这个标准模块。

它可以让你注册一个函数,这个函数会在程序结束时被执行。

撰写回答