非守护进程中的python非守护进程线程无效

时间:2017-07-21 22:49:22

标签: python python-multiprocessing python-multithreading

下面显示的一个简单的非守护程序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来等待线程完成。但是,如果可能的话,我宁愿不这样做,即使进程在到达它之前在某个其他点崩溃,该线程将继续按照您对非守护进程线程的预期运行。

0 个答案:

没有答案