Итак ... я думаю, что, возможно, удалось решить эту проблему путем объединения 10 различных сообщений SO таким образом, которого я не видел ни в одном сообщении SO ..., пожалуйста, критикуйте и скажите мне, глупо это или блестяще ...; -)
[Поскольку этот вопрос очень тесно связан, по крайней мере, с двумя другими ... Я предложил свое решение в качестве независимого ответа в обеих связанных темах: 1 2 ]
import threading
import time
import atexit
def do_work():
i = 0
@atexit.register
def goodbye():
print ("'CLEANLY' kill sub-thread with value: %s [THREAD: %s]" %
(i, threading.currentThread().ident))
while True:
print i
i += 1
time.sleep(1)
t = threading.Thread(target=do_work)
t.daemon = True
t.start()
def after_timeout():
print "KILL MAIN THREAD: %s" % threading.currentThread().ident
raise SystemExit
threading.Timer(2, after_timeout).start()
Выход:
0
1
KILL MAIN THREAD: 140013208254208
'CLEANLY' kill sub-thread with value: 2 [THREAD: 140013674317568]
Я думаю, что это секретный соус, который подойдет для моего приложения.Мой подпоток теперь корректно очищается после определенного промежутка времени без всякой бессмысленной проверки флага цикла внутри упомянутого подпотока ... И я, кажется, даже получаю небольшой проблеск контроля в подпотоке, где я могу сделать какое-то окончательное состояниепроверка и очистка.