【发布时间】:2014-10-19 16:32:03
【问题描述】:
我认为 Python 进程在终止时会调用它们的 atexit 函数。请注意,我使用的是 Python 2.7。这是一个简单的例子:
from __future__ import print_function
import atexit
from multiprocessing import Process
def test():
atexit.register(lambda: print("atexit function ran"))
process = Process(target=test)
process.start()
process.join()
我希望这会打印“atexit function ran”,但事实并非如此。
注意这个问题: Python process won't call atexit 类似,但它涉及以信号终止的进程,答案涉及拦截该信号。此问题中的进程正在正常退出,因此(据我所知)该问题和答案不适用(除非这些进程由于某种信号而退出?)。
【问题讨论】:
-
@MichaelBrennan 该问题涉及以信号终止的进程。我的进程只是优雅地退出,所以这不是重复的(据我所知,那里发布的修复不适用于此处,除非我的进程也以某种方式被信号杀死?)
-
你是对的,不知何故我得出的结论是,即使没有
terminate(),也会使用信号。我已经删除了重复的评论。也许您可以设置一个信号处理程序并尝试找出是否有任何信号发送? -
据我所知,退出代码(即 process.exitcode,在 join 执行后评估)为零。如果我终止该过程,我会从文档中得到一个否定的退出代码。所以我很困惑!我无法想象这个基本原理被破坏了,但我无法在任何地方找到证据表明这不应该像我预期的那样起作用。
标签: python multiprocessing atexit