我是一個新手在python編程,我的理解是,一個進程可以是一個守護進程,但一個線程在守護進程模式,我無法理解這個用例,我會請求python大師們幫助我理解這一點。提前致謝。setDaemon函數線程
回答
下面是一些基本的代碼使用線程:
import Queue
import threading
def basic_worker(queue):
while True:
item = queue.get()
# do_work(item)
print(item)
queue.task_done()
def basic():
# http://docs.python.org/library/queue.html
queue = Queue.Queue()
for i in range(3):
t = threading.Thread(target=basic_worker,args=(queue,))
t.daemon = True
t.start()
for item in range(4):
queue.put(item)
queue.join() # block until all tasks are done
print('got here')
basic()
當你運行它,你就會得到
% test.py
0
1
2
3
got here
現在註釋掉該行:再次
t.daemon = True
運行它,你會看到腳本打印出相同的結果,但掛起。 主線程結束(請注意,打印了got here
),但第二個線程永遠不會結束。
相反,當t.daemon
設置爲True
時,線程t
在主線程結束時終止。
請注意,「守護程序線程」與daemon processes無關。
謝謝,這很有幫助 – hue 2011-02-26 15:13:04
應該是t.SetDaemon(True)? – GreenAsJade 2012-12-30 11:43:16
@GreenAsJade:[t.setDaemon(True)](http://docs.python.org/2/library/threading.html#threading.Thread.setDaemon)是舊API的一部分。現在,[t.daemon = True](http://docs.python.org/2/library/threading.html#threading.Thread.daemon)是使't'成爲守護線程的推薦方式。 – unutbu 2012-12-30 11:58:50
模塊隊列已被重命名爲以Python3開頭的隊列,以更好地反映模塊中有幾個隊列類(lifo,fifo,priority)的事實。 所以請在使用此示例時進行更改
- 1. 線程和函數'打印'
- 2. Qt線程調用函數
- 3. '多線程'setInterval函數(Javascript)
- 4. 多線程aws函數
- 5. ThreadbyEvaluatingJavascript的線程函數
- 6. C++線程函數說明
- 7. 多線程函數調用
- 8. boost ::線程函數執行
- 9. strtok函數線程安全
- 10. 線程化函數-PyQt GUI
- 11. 在線程中運行函數或在函數中使用線程
- 12. 將函數參數綁定到線程
- 13. 線程池是否可以在單線程函數上運行?
- 14. 多線程DLL和鎖從第二個線程調用函數
- 15. 線程函數如何訪問父線程的變量
- 16. 從工作線程調用主線程回調函數
- 17. 線程在構造函數,C++
- 18. 函數的多重處理/線程
- 19. 如何使線程函數自包含
- 20. 線程同步和成員函數
- 21. pthread_exit來自線程調用的函數
- 22. 線程中斷與JNI函數調用
- 23. 與Java交叉線程函數調用
- 24. 創建線程問題的Enif_send函數
- 25. 使用線程定時調用函數
- 26. 基於函數輸入的線程塊
- 27. 在新線程powershell中調用函數
- 28. GTK:委託函數調用主線程
- 29. C++線程靜態構造函數
- 30. boost ::線程和模板函數
對此的最佳答案是http://stackoverflow.com/a/190017/260122。 – clacke 2016-04-11 12:21:25
[Daemon Threads Explanation]可能的重複(http://stackoverflow.com/questions/190010/daemon-threads-explanation) – clacke 2016-04-11 12:23:40