如何創建一個將生成一些子線程的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