我正在学习有关线程之间共享数据的知识,偶然发现了这个不同的问题。据我了解,守护线程在主线程完成时被杀死。简单的代码如下:
import threading
from time import sleep
def thread(Nr):
global x
lock.acquire()
x = Nr
print(x)
sleep(4)
print(x)
lock.release()
return 0
#################################################################################
x = 2
lock = threading.Lock()
for i in range(6):
#print("Thread Nr: ", i)
arg1 = i
t = threading.Thread(target = thread, args = (arg1,), name = arg1)
t.setDaemon(True)
print("new thread started : %s" % (str(threading.current_thread().ident)))
t.start()
sleep(1)
print("Main thread end")
我正在启动6个线程,这是我在IDLE python 3.7.2中的输出:
new thread started : 940
0
new thread started : 940
new thread started : 940
new thread started : 940
new thread started : 9400
1
new thread started : 940
Main thread end
>>> 1
2
2
3
3
4
4
5
5
因此,如您所见,即使线程是消声的,线程也继续在主线程之后运行。我发现的一件有趣的事情是如果它们是从Windows cmd而不是IDLE运行的,则它们在“主线程结束”之后不打印任何内容。
有人知道这里发生了什么吗?
谢谢:)
答案 0 :(得分:0)