我是一个新手在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