【问题标题】:How to run a clean up when terminating Python script终止 Python 脚本时如何运行清理
【发布时间】:2015-03-16 16:40:21
【问题描述】:

我有一个 python 脚本可以完成一些工作。我使用multiprocessing.Pool 让一些工人为我执行一些命令。

我的问题是当我尝试终止脚本时。当我按下 Ctrl-C 时,我希望每个工作人员立即清理其实验(这是一些自定义代码,甚至是子进程命令,而不仅仅是释放锁或内存)并停止。

我知道我可以用信号处理程序捕获 Ctrl-C。如何让multiprocessing.Pool 的所有当前正在运行的工作人员终止,仍然执行他们的清理命令?

Pool.terminate() 将无用,因为进程将在不清理的情况下终止。

【问题讨论】:

    标签: python multiprocessing terminate


    【解决方案1】:

    试试atexit 标准模块怎么样?

    它允许您注册一个将在终止时执行的函数。

    【讨论】:

    • 不,它说:“注意:当程序被信号杀死时,不会调用通过此模块注册的函数”。我需要让它被信号杀死
    • “被信号杀死”我认为这意味着被你没有明确捕捉和处理自己的信号杀死。如果您使用 Python 信号处理程序来捕获 Ctrl-C 并自己处理它,您可以在处理程序中做您喜欢的事情。
    【解决方案2】:

    您在使用 Unix 吗?如果是,为什么不在子进程中捕获 SIGTERM?其实Process.terminate()的文档是这样写的:

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

    (我没有测试过。)

    【讨论】:

      猜你喜欢
      • 2013-11-15
      • 1970-01-01
      • 2020-04-10
      • 2021-03-20
      • 2016-10-01
      • 1970-01-01
      • 2020-11-27
      • 2021-07-31
      • 2014-09-26
      相关资源
      最近更新 更多