gpt4 book ai didi

python - 防止在多处理中调用 __del__

转载 作者:行者123 更新时间:2023-11-28 20:51:07 24 4
gpt4 key购买 nike

在使用 multiprocessing 时,我注意到在下面的脚本中,__del__ 被调用了两次(一次在子进程中,一次在父进程中)。

class myclass(object):

def __init__(self,val):
self.val=val
print ("Initializing %s"%str(self.val))

def __del__(self):
print ("deleting %s"%str(self.val))


if __name__ == "__main__":
import multiprocessing
p=multiprocessing.Pool(4)
obj_list=p.map(myclass,range(30))
raw_input()

对于这个脚本,没关系……但是如果 __del__ 有副作用怎么办? (我能想到的一个可能的例子是释放某种锁定文件)。有没有办法防止 __del__ 被调用两次?

最佳答案

__del__ 通常用于完成一个对象,而不是外部资源,因此在两个进程中调用它是有意义的(当然,因为在叉)。尝试阻止在给定进程中使用 __del__ 不是一个好主意,但在您确实、真的需要它来关闭外部资源的地方,例如文件系统上的文件,它不会被 fork 复制,你的析构函数应该在这样做之前检查预期的资源是否真的需要清理。 “释放某种锁定文件”可能是也可能不是这种情况,具体取决于您如何实现。

如果可以的话,您可能希望使用“with”上下文管理器来获取和释放资源,而不是依赖垃圾收集的变幻莫测。

关于python - 防止在多处理中调用 __del__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10685921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com