浅谈守护进程和守护线程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈守护进程和守护线程相关的知识,希望对你有一定的参考价值。
线程是由进程开启的,当开启线程的进程离开时,该线程也自然而然的去了.
一般情况下, Python 中的多线程操作有两种方式:
1.函数式
创建一个活动函数,将函数当做参数传入,然后用 threading 模块:
threading.Thread(target = 函数名,args = (a,b))
2.继承
去继承一个来自 threading.Thread 的类,功能写在 self.run() 中
方法1:
from threading import Thread
import time
def eat(name):
print(‘%s is eating )%name
if __name__ == ‘__main__‘# windows 要写这句(别问为什么,没有原因必须要写.).其他的...嗯.你随意 你怎么开心怎么来.我是爱你的.你是自由的
t = Thread(target = eat,args = (‘ff‘,)) #创建线程,接着要开启它
t.start()
print(‘??‘)
from threading import Thread
import time
class Eat(Thread):
def __init__(self,name):
super().__init__()
self.name = name
def run(self):
time.sleep(2)
print(‘%s is eating ‘%self.name)
if __name__ == ‘__main__‘:
t = Eat(‘ff‘)
t.start()
print(‘??‘)
首先只要牵扯到守护,那就要先想到一个daemon
!!!无论是进程还是线程都会遵循:
守护进程/守护线程都会等待??进程/??线程运行完毕后被销毁.!!!
运行完毕并非是终止运行
- 对主进程来说,运行完毕指的是主进程代码运行结束
- 对主线程来说,就是指主线程所在的进程内的非守护线程统统运行完毕,主线程才算运行完毕
守护进程
设置方式: ```python
if name == ‘main‘: p=Process(target = funcname , args= (参数,)) p.setDaemon(True) #必须在t.start()之前设置 p.start() #p.join() 这里这个 join 什么时候需要加,我也很模糊...
那个 True 必须得有. 因为默认是 False,就代表主进程结束时,子进程依然在执行.
###主进程创建守护进程
1. 守护进程会在主进程代码执行结束后就终止.
2. 守护进程内无法再开启子进程,否则抛异常.
*进程之间是相互独立的,被守护的进程运行结束,守护进程也就跟着挂*
##守护线程
设置方式
```python
if __name__ == ‘__main__‘:
t=Thread(target = funcname , args= (参数,))
t.setDaemon(True) #必须在t.start()之前设置
t.start()
#t.join() 这里这个 join 什么时候需要加,我也很模糊...
#那个 True 必须得有. 因为默认是 False,就代表主线程结束时,子线程依然在执行.
- 守护线程等待主线程代码执行完毕后就终止
- 主线程代码执行完毕后(守护线程此时就被回收),不会 gg ,因为它还要等非守护线程运行结束后,才会彻底 gg.
以上是关于浅谈守护进程和守护线程的主要内容,如果未能解决你的问题,请参考以下文章