守护进程行为多处理多线程
daemon behaviour multiprocessing multithreading
from multiprocessing import Process
from threading import Thread
def main():
thread1 = myclass(varA) #subclassed threading.Thread
thread1.daemon = False
thread1.start()
thread2 = Thread(target=myfunc)
thread2.daemon = False
thread2.start()
while True:
time.sleep(1)
if __name__ == "__main__":
SUBPROCESS = Process(target=main)
SUBPROCESS.daemon = False
SUBPROCESS.start()
除非我在 main() 中添加 while True: sleep,否则为什么脚本会死掉? (thread1 和 thread2 都有永远 运行 的功能)
daemon = False 不应该让它们保持活动状态(子进程和该子进程中的子线程),即使父进程已经结束?
EDIT1(工作代码)(查看方法 A 或方法 B 的注释,注释块 运行ning 时的部分之一):
from multiprocessing import Process
from threading import Thread
import time
varA = "XYZ"
class myclass(Thread):
def __init__(self, varA):
Thread.__init__(self)
self.varA = varA
def run(self):
while True:
print("myClass prints %s" %self.varA)
def myfunc():
while True:
print("myfunc prints")
def main():
thread1 = myclass(varA) #subclassed threading.Thread
thread1.daemon = False
thread1.start()
thread2 = Thread(target=myfunc)
thread2.daemon = False
thread2.start()
if __name__ == "__main__":
#METHOD A: Running as subprocess = subthreads in that subprocess will die
SUBPROCESS = Process(target=main)
SUBPROCESS.daemon = False
SUBPROCESS.start()
#METHOD B: Running as main process = subthreads in that subprocess wont die as desired
thread1 = myclass(varA) #subclassed threading.Thread
thread1.daemon = False
thread1.start()
thread2 = Thread(target=myfunc)
thread2.daemon = False
thread2.start()
这是Python issue 18966;多处理进程在关闭前没有 join
个非守护线程。 Python 3.7.0 中的行为已更改,因此现在处理 join
它们的非守护线程。
from multiprocessing import Process
from threading import Thread
def main():
thread1 = myclass(varA) #subclassed threading.Thread
thread1.daemon = False
thread1.start()
thread2 = Thread(target=myfunc)
thread2.daemon = False
thread2.start()
while True:
time.sleep(1)
if __name__ == "__main__":
SUBPROCESS = Process(target=main)
SUBPROCESS.daemon = False
SUBPROCESS.start()
除非我在 main() 中添加 while True: sleep,否则为什么脚本会死掉? (thread1 和 thread2 都有永远 运行 的功能) daemon = False 不应该让它们保持活动状态(子进程和该子进程中的子线程),即使父进程已经结束?
EDIT1(工作代码)(查看方法 A 或方法 B 的注释,注释块 运行ning 时的部分之一):
from multiprocessing import Process
from threading import Thread
import time
varA = "XYZ"
class myclass(Thread):
def __init__(self, varA):
Thread.__init__(self)
self.varA = varA
def run(self):
while True:
print("myClass prints %s" %self.varA)
def myfunc():
while True:
print("myfunc prints")
def main():
thread1 = myclass(varA) #subclassed threading.Thread
thread1.daemon = False
thread1.start()
thread2 = Thread(target=myfunc)
thread2.daemon = False
thread2.start()
if __name__ == "__main__":
#METHOD A: Running as subprocess = subthreads in that subprocess will die
SUBPROCESS = Process(target=main)
SUBPROCESS.daemon = False
SUBPROCESS.start()
#METHOD B: Running as main process = subthreads in that subprocess wont die as desired
thread1 = myclass(varA) #subclassed threading.Thread
thread1.daemon = False
thread1.start()
thread2 = Thread(target=myfunc)
thread2.daemon = False
thread2.start()
这是Python issue 18966;多处理进程在关闭前没有 join
个非守护线程。 Python 3.7.0 中的行为已更改,因此现在处理 join
它们的非守护线程。