如何创建一个将生成一些子线程的Python程序。 主线程&子线程正在并行执行。子线程需要定期检查 ,如果父代处于活动状态或者没有活动,则所有子进程都应该自行终止。如何创建自动终止子线程,如果父线程不活着
4
A
回答
0
您应在daemon
财产Thread对象的,就像这样:
import threading
import time
def worker():
while True:
time.sleep(1)
print('doing work')
t = threading.Thread(target=worker)
t.daemon = True
t.start()
编辑:要使用多个线程,你可以创建线程的列表:
my_threads = []
for i in range(0, 5):
my_threads.append(threading.Thread(target=worker))
my_threads[-1].daemon = True
2
可以传递threading.currentThread()
从父节点给子线程给定的引用,并定期检查父节点是否仍然有效。
import threading
import time
class Child(threading.Thread):
def __init__(self, parent_thread):
threading.Thread.__init__(self)
#self.daemon = True
self.parent_thread = parent_thread
def run(self):
while self.parent_thread.is_alive():
print "parent alive"
time.sleep(.1)
print "quiting"
Child(threading.currentThread()).start()
time.sleep(2)
作为第二选择,你可以调用self.parent_thread.join()
等待阻塞线程来完成。
https://docs.python.org/2/library/threading.html#threading.Thread.join
或者你可以在子线程设置为daemon
模式,但如果只有活着守护线程的整个过程将终止。这不一定是你想要的正常关机。
https://docs.python.org/2/library/threading.html#threading.Thread.daemon
相关问题
- 1. 如何通知父线程所有子线程都已终止?
- 2. 线程内线程:如果父线程被终止会发生什么?
- 3. Java中的子线程是否阻止父线程终止?
- 4. C++子线程终止在main()父线程退出?
- 5. 当父线程终止时子线程退出
- 6. 如何终止performSelectorInBackground:线程?
- 7. 如何终止线程
- 8. 子线程如何通知父线程终止所有其他的子线程的Java
- 9. 如何取消(不终止)boost线程?
- 10. 终止线程
- 11. 终止线程
- 12. 如何从子线程或其他线程获取父线程?
- 13. 自动终止C++ 11 STL线程
- 14. 线程终止问题(C):最后线程不终止
- 15. 父进程在C#中终止时如何终止子进程
- 16. 线程不会终止
- 17. mtTkinter不会终止线程
- 18. 从父线程终止工作者线程 - MFC
- 19. 如何在线程终止后自动执行FreeAndNill()
- 20. 如何在JVM自动终止时生成线程转储
- 21. Java创建父线程
- 22. 终止Java线程
- 23. Java线程终止
- 24. Java - 终止线程
- 25. SlimDX - 终止线程
- 26. 如何在delphi中直接在线程外终止线程?
- 27. Java:如何让这个主线程等待新线程终止
- 28. 在VB6中创建子进程,当程序终止时自动终止
- 29. 如何终止C++ 11中的线程?
- 30. 如何终止线程的ExecutorService