Python3多处理终止vs杀死vs关闭

我明白terminatekill的作用。 close()是做什么的?

这是python文档的引文:

  

关闭Process对象,释放与其关联的所有资源。   如果基础进程仍在运行,则会引发ValueError。一旦   close()成功返回,大多数其他方法和属性   过程对象将引发ValueError。

在我看来,这是有史以来最无用的通话:

  • 如果该进程仍在运行,则不执行任何操作,但会因异常而失败

  • 如果该进程已经终止...正在忙于清理或完成该操作,为什么我要在其上调用显式close()? (此调用的使用是否取决于操作系统?)

此文档条目是否可能非常笨拙,并且某种程度上确实意味着close()有权终止线程,但这仅在某些python定义的检查点上有效?

aisini666 回答:Python3多处理终止vs杀死vs关闭

The issue that added that method解释:

  

multiprocessing.Process(实际上是附加的_popen对象)具有基于GC的终结器,用于释放系统资源(例如fds)。但是,能够及时释放这些资源将是很好的。添加close()方法可以使用户做到这一点。

基本上,没有close时,只有在sentinel被垃圾回收时,某些资源(用于与父对象通信的文件描述符,Process句柄,您拥有的东西)才会关闭,在非CPython解释器上,或者在参考周期的情况下甚至在CPython上,可能会在将来的某个不确定时间发生。

close的存在使您可以确保在特定时间点明确清理了资源,因此,例如,启动许多Process es的进程可以确保清理文件描述符立即启动以防止遇到ulimit或内核施加的文件描述符限制。

通常的使用情况是在.close()(或.join().kill())之后立即调用.terminate()Process最终释放资源,即使您不这样做,也可能不会立即发生。

本文链接:https://www.f2er.com/3099225.html

大家都在问