无法使用thread.setDaemon(True)在主程序终止时终止子线程

时间:2016-01-28 12:24:23

标签: python python-2.7 python-multithreading python-daemon

档案一个sravi.py

def sam():
    while True:
        print "HI"

主程序/文件trial.py

from threading import Thread
import sravi
x=Thread(target=sravi.sam)
#x.setDaemon(True)
#x.Daemon=True
x.start()

我想在主线程结束后停止打印“Hi”,但它会继续打印HI。我尝试过使用x.setDaemon(True)和x.Daemon = True,但它无效。我知道以前曾问过这些问题,但我无法找出解决方案

------- O / P -------

>>>
>>>Hi
Hi
Hi
Hi
Hi
Hi
Hi

继续打印

3 个答案:

答案 0 :(得分:0)

当x.setDaemon(True)时,线程x在主线程结束时终止 为了证明这一点,请使用以下代码:

from threading import Thread
def sam():
    while True:
    print "HI"


x=Thread(target=sam)
x.setDaemon(True)
x.start()
time.sleep(2)

你会看到两秒后sam功能将停止打印“hi”。

答案 1 :(得分:0)

档案一个sravi.py

import time

def sam(event):
    while event.is_set():
        print "hi"

主程序/文件trial.py

import threading 
import sravi
import time
event=threading.Event()
event.set()
x=threading.Thread(target=sravi.sam,args=(event,))
x.start()
time.sleep(0.1)
event.clear()

子线程在主线程结束后停止执行

答案 2 :(得分:0)

test.py:

from threading import Thread
import sravi
x=Thread(target=sravi.sam)
x.daemon=True
x.start()

sravi.py:

def sam():
  while True:
    print "Hi"

当您运行python test.py时,任意数量的行代表"嗨"可能会在退出前打印出来。这仅仅是因为执行线程的确切交织是不确定的。我们无法保证您只能得到一个"嗨"。