0

文件一 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

它继续打印 hi

4

3 回答 3

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”。

于 2016-01-28T12:41:52.417 回答
0

测试.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,可能会在退出前打印出任意数量的“Hi”行。那只是因为执行线程的确切交织是未定义的。不能保证您只会得到一个“嗨”。

于 2016-01-29T08:07:17.387 回答
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()

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

于 2016-01-29T07:49:21.417 回答