浅谈守护进程和守护线程

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

!!!无论是进程还是线程都会遵循:

守护进程/守护线程都会等待??进程/??线程运行完毕后被销毁.!!!

运行完毕并非是终止运行

  1. 对主进程来说,运行完毕指的是主进程代码运行结束
  2. 对主线程来说,就是指主线程所在的进程内的非守护线程统统运行完毕,主线程才算运行完毕

守护进程

设置方式: ```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,就代表主线程结束时,子线程依然在执行.
  1. 守护线程等待主线程代码执行完毕后就终止
  2. 主线程代码执行完毕后(守护线程此时就被回收),不会 gg ,因为它还要等非守护线程运行结束后,才会彻底 gg.

以上是关于浅谈守护进程和守护线程的主要内容,如果未能解决你的问题,请参考以下文章

守护进程VS守护线程

守护线程与守护进程

python基础-守护进程守护线程守护非守护并行

守护进程与守护线程的区别

5.1.14 守护线程

Python实例浅谈之五Python守护进程和脚本单例运行