子线程或进程可以在父线程中生存的Python线程或进程模型?

时间:2019-06-03 03:55:35

标签: python python-multiprocessing

这是关于使用线程与多进程的python脚本的设计问题。据我了解,使用线程模块生成线程无法幸免于父线程(即进程)的终止。父线程必须执行联接(即不等待等待超时)或退出(如果没有联接),则在父出口退出子线程。这是由于线程的共享资源模型,对吧?

生成进程时,多处理模块可以生存,即继续完成,而不管创建它的父进程退出还是终止。当然,这是假设父进程从未调用联接来完成子进程。

1 个答案:

答案 0 :(得分:1)

ValueError: Must explicitly set engine if not passing in buffer or path for io. threading均旨在在程序内实现并行性。他们的目标不是启动独立的流程。因此,这两个软件包在准备关闭解释器时会隐式终止其并行执行路径。

线程是进程的子集,它们不能超过创建它们的进程的寿命。
在解释器关闭时,使用线程模块中的函数_shutdown()隐式加入活动非守护线程。该函数在Python解释器生命周期的终结例程中是called
守护线程只是以解释器过程结尾。

如果在解释器准备关闭时通过multiprocessing创建的进程仍然存在,则它们会由_exit_function()终止,而registered as exit handler已通过atexit终止。 。与multiprocessing类似,threading连接非守护进程子进程。在守护进程的子级上,将调用multiprocessing

如果要从Python程序启动进程并在之后退出该程序,请使用subprocess.Popen。如果您使用的是POSIX平台,则可能还需要看一下python-daemon