我已经提到过这个帖子,但它似乎已经过时了 似乎没有一个明确的解释
Python daemon thread does not exit when parent thread exits
我正在运行 python 3.6 并尝试从 IDLE 或 Spyder IDE 运行脚本。
这是我的代码:
import threading
import time
total = 4
def creates_items():
global total
for i in range(10):
time.sleep(2)
print('added item')
total += 1
print('creation is done')
def creates_items_2():
global total
for i in range(7):
time.sleep(1)
print('added item')
total += 1
print('creation is done')
def limits_items():
#print('finished sleeping')
global total
while True:
if total > 5:
print ('overload')
total -= 3
print('subtracted 3')
else:
time.sleep(1)
print('waiting')
limitor = threading.Thread(target = limits_items, daemon = True)
creator1 = threading.Thread(target = creates_items)
creator2 = threading.Thread(target = creates_items_2)
print(limitor.isDaemon())
creator1.start()
creator2.start()
limitor.start()
creator1.join()
creator2.join()
print('our ending value of total is' , total)
尽管是守护线程,限制器线程似乎并未结束。
这是从 IDLE 或 Spyder 开始工作的方法吗?
谢谢。
最佳答案
我遇到了同样的问题,并通过使用多处理而不是线程解决了它:
from multiprocessing import Process
import multiprocessing
from time import sleep
def daemon_thread():
for _ in range(10):
sleep(1)
print("Daemon")
if __name__ == '__main__':
multiprocessing.freeze_support()
sub_process = Process(target = daemon_thread, daemon = True)
sub_process.start()
print("Exiting Main")
我还没有真正理解为什么我需要调用 freeze_support() 但它使代码可以工作。
关于python - 尽管主程序已完成,守护线程仍不退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44832070/