这是关于使用线程与多进程的python脚本的设计问题。据我了解,使用线程模块生成线程无法幸免于父线程(即进程)的终止。父线程必须执行联接(即不等待等待超时)或退出(如果没有联接),则在父出口退出子线程。这是由于线程的共享资源模型,对吧?
生成进程时,多处理模块可以生存,即继续完成,而不管创建它的父进程退出还是终止。当然,这是假设父进程从未调用联接来完成子进程。
答案 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
。