如何在终止Python脚本时进行清理
我有一个用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这个标准模块。
它可以让你注册一个函数,这个函数会在程序结束时被执行。