python-- 进程的常用属性、守护进程

简介: python-- 进程的常用属性、守护进程

常用属性


  • p.name = 给p进程一个名字
  • p.pid 返回p进程的pid
  • p.daemon = True 将p进程设置为守护进程。(True为守护进程,False为普通进程)
from multiprocessing import Process
import os
import time
def func():
    print('这里是儿子,儿子的pid是%s' % (os.getpid()))
if __name__ == '__main__':
    p = Process(target=func)
    p.start()
    p.name = 'zou'
    print('儿子的名字是%s' % (p.name))
    print('儿子的pid是%s' % (p.pid))
    print('儿子是不是守护进程?', p.daemon)

结果:

儿子的名字是zou
儿子的pid是3706
儿子是不是守护进程? False
这里是儿子,儿子的pid是3706


守护进程


  • 守护进程,必须要在start之前设置,之后设置会报错
  • 守护进程:跟随着父进程的代码执行结束,守护进程就结束(不严谨,看下面的例子)
  • 守护进程:不允许开启子进程

没有守护进程

from multiprocessing import Process
import os
import time
def func():
    print('子进程结束了')
if __name__ == '__main__':
    p = Process(target=func)
    p.start()
    p.name = 'zou'
    print('主进程结束了')

结果:

主进程结束了
子进程结束了

没有守护进程时,主进程结束了,子进程还在执行

有守护进程

from multiprocessing import Process
import os
import time
def func():
    print('子进程结束了')
if __name__ == '__main__':
    p = Process(target=func)
    p.daemon = True  # 将p进程设置为守护进程,必须要在start之前设置
    p.start()
    p.name = 'zou'
    print('主进程结束了')

结果:

主进程结束了

将p进程设置为守护进程后,主进程结束后,不管子进程执行到哪,子进程都会结束

from multiprocessing import Process
import os
import time
def func():
    time.sleep(1)
    print('子进程结束了')
if __name__ == '__main__':
    p = Process(target=func)
    p.daemon = True  # 将p进程设置为守护进程,必须要在start之前设置
    p.start()
    p.name = 'zou'
    print('主进程结束了')
    p.join()

结果:

主进程结束了
子进程结束了

如果有join()则会等待子进程结束完


守护进程:不允许开启子进程


没有设置守护进程时

from multiprocessing import Process
import time
def demo():
    print('demo....')
def func():
    p1 = Process(target=demo)
    p1.start()
    print('子进程结束了')
if __name__ == '__main__':
    p = Process(target=func)
    # p.daemon=True# 将p进程设置为守护进程,必须要在start之前设置
    p.start()
    p.name = 'zou'
    print('主进程结束了')
    time.sleep(2)

结果:

可以启动子进程

主进程结束了
子进程结束了
demo....

设置了守护进程

from multiprocessing import Process
import os
import time
def demo():
    print('demo....')
def func():
    p1 = Process(target=demo)
    p1.start()
    print('子进程结束了')
if __name__ == '__main__':
    p = Process(target=func)
    p.daemon = True  # 将p进程设置为守护进程
    p.start()
    p.name = 'zou'
    print('主进程结束了')
    time.sleep(2)

运行会报错


相关文章
|
6天前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
11 1
|
13天前
|
数据挖掘 程序员 调度
探索Python的并发编程:线程与进程的实战应用
【10月更文挑战第4天】 本文深入探讨了Python中实现并发编程的两种主要方式——线程和进程,通过对比分析它们的特点、适用场景以及在实际编程中的应用,为读者提供清晰的指导。同时,文章还介绍了一些高级并发模型如协程,并给出了性能优化的建议。
21 3
|
1月前
|
负载均衡 Java 调度
探索Python的并发编程:线程与进程的比较与应用
本文旨在深入探讨Python中的并发编程,重点比较线程与进程的异同、适用场景及实现方法。通过分析GIL对线程并发的影响,以及进程间通信的成本,我们将揭示何时选择线程或进程更为合理。同时,文章将提供实用的代码示例,帮助读者更好地理解并运用这些概念,以提升多任务处理的效率和性能。
51 3
|
10天前
|
存储 Python
Python中的多进程通信实践指南
Python中的多进程通信实践指南
12 0
|
13天前
|
Linux C++
Linux c/c++进程之僵尸进程和守护进程
这篇文章介绍了Linux系统中僵尸进程和守护进程的概念、产生原因、解决方法以及如何创建守护进程。
15 0
|
18天前
|
数据采集 消息中间件 Python
Python爬虫-进程间通信
Python爬虫-进程间通信
11 0
|
27天前
|
存储 API 索引
让 Python 的属性查找具有 C 一级的性能
让 Python 的属性查找具有 C 一级的性能
12 0
|
27天前
|
数据采集 Linux 调度
Python之多线程与多进程
Python之多线程与多进程
25 0
|
28天前
|
Python
Python中类属性与实例属性的区别
了解这些区别对于编写高效、易维护的Python代码至关重要。正确地使用类属性和实例属性不仅能帮助我们更好地组织代码,还能提高代码运行的效率。
17 0
|
1月前
|
Python
Python类中属性和方法区分3-8
Python类中属性和方法区分3-8