下面显示的一个简单的非守护程序python线程按预期工作:
import threading
import time
def printBar():
for i in range(5):
print "Bar"
time.sleep(1)
barThread = threading.Thread(target=printBar)
barThread.daemon = False
barThread.start()
time.sleep(2.5)
print "Main thread exits"
输出:
Bar
Bar
Bar
Main thread exits
Bar
Bar
但是,如果我们将线程放在主进程的子进程中,则线程会随进程一起退出,即使它被设置为非守护进程。当父进程退出时,是否存在使线程保持活动状态的变通方法? 示例代码:
import threading
import time
import multiprocessing
def Foo():
def printBar():
for i in range(5):
print "Bar"
time.sleep(1)
barThread = threading.Thread(target=printBar)
barThread.daemon = False
barThread.start()
time.sleep(2.5)
print "Foo process exits"
fooProcess = multiprocessing.Process(target=Foo)
fooProcess.daemon = False
fooProcess.start()
print "Main process Exits"
获得输出:
Main process Exits
Bar
Bar
Bar
Foo process exits
期望的输出:
Main process Exits
Bar
Bar
Bar
Foo process exits
Bar
Bar
回答@ moe-a的评论(我没有足够的声誉发表评论:():
这是一个很好的问题。我可以在进程结束时调用thread.join来等待线程完成。但是,如果可能的话,我宁愿不这样做,即使进程在到达它之前在某个其他点崩溃,该线程将继续按照您对非守护进程线程的预期运行。