我是一個新手在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. Boost線程不調用線程函數
- 3. c,創建線程和線程函數
- 4. 線程和函數參數
- 5. C++虛函數和線程
- 6. strtok函數線程安全
- 7. boost ::線程函數執行
- 8. 多線程aws函數
- 9. 線程和函數'打印'
- 10. Qt線程調用函數
- 11. C++線程函數說明
- 12. 從線程調用函數
- 13. 多線程函數調用
- 14. ThreadbyEvaluatingJavascript的線程函數
- 15. '多線程'setInterval函數(Javascript)
- 16. matlab多線程函數
- 17. 線程化函數-PyQt GUI
- 18. P線程:線程調用函數與多個參數
- 19. 在線程中運行函數或在函數中使用線程
- 20. 將函數參數綁定到線程
- 21. iOS上的線程函數的參數
- 22. 多線程DLL和鎖從第二個線程調用函數
- 23. 線程類實例創建一個線程函數
- 24. 多線程調用函數定義在C從TCL線程
- 25. .NET在其他線程的主線程(UI)中執行函數
- 26. 線程函數如何訪問父線程的變量
- 27. 呼叫阻塞UI線程函數從後臺線程
- 28. 線程池是否可以在單線程函數上運行?
- 29. 從工作線程調用主線程回調函數
- 30. shared_from_this()從另一個線程(一個成員線程函數)
對此的最佳答案是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