(6)进程的其他属性以及守护进程

进程的其他属性
 
1、p.pid() :  #获取进程id
2、os.getpid() :  #获取进程id
3、os.getppid() :  #获取父进程id
4、p.name:  #进程的名称
5、p.daemon: #默认值为False,如果设为True,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止,并且设定为True后,p不能创建自己的新进程,必须在p.start()之前设置
6、p.is_alive():  #如果p仍然运行,返回True
 
 
查看主进程号
import time
from multiprocessing import Process


def task(x):
print('%s is runing'% x)
time.sleep(2)
print('%s is done' % x)

if __name__ == '__main__':
p = Process(target=task,args=('子进程',))
p.start()
print(p.pid) #打印进程号
print('主进程。。。')
 
查看子进程号
import time,os # 需要调用os模块的下的getpid()方法
from multiprocessing import Process


def task(x):
print('%s is runing %s'% (x,os.getpid()) #在子进程内查看进程号
time.sleep(2)
print('%s is done' % x)

if __name__ == '__main__':
p = Process(target=task,args=('子进程',))
p.start()
print('主进程。。。')
 
查看父进程号
PS:父进程就是整个程序的进程
import time,os # 需要调用os模块的下的getpid()方法
from multiprocessing import Process


def task(x):
print('%s is runing %s'% (x,os.getpid()) #在子进程内查看父进程号
time.sleep(2)
print('%s is done' % x)

if __name__ == '__main__':
p = Process(target=task,args=('子进程',))
p.start()
print('主进程。。。')
 
查看进程名称
import time
from multiprocessing import Process


def task(x):
print('%s is runing %s'% x)
time.sleep(2)
print('%s is done' % x)

if __name__ == '__main__':
p = Process(target=task,args=('子进程',))
p.start()
print(p.name) #如果没有设置进程名称,默认是Process-1
print('主进程。。。')
 
自定意义进程名称
import time
from multiprocessing import Process


def task(x):
print('%s is runing %s'% x)
time.sleep(2)
print('%s is done' % x)

if __name__ == '__main__':
p = Process(target=task,args=('子进程',),name='QQ') # 在括号内的参数name定义一个名称,这个name就是给进程定义名称的参数
p.start()
print(p.name)
print('主进程。。。')
 
判断进程是否存活
import os
import time
from multiprocessing import Process


def task(x):
print('%s is runing %s' % (x,os.getppid())) # getppid查看父进程号
time.sleep(2)
print('%s is done %s' % (x,os.getppid()))


if __name__ == '__main__':
p = Process(target=task, args=('子进程',), name='QQ')
p.start()
print(p.name) # 打印进程名称
print(p.is_alive()) # is_alive就是判断进程是否结束,如果没结束则是True,结束则是False
print('主进程。。。')
 
守护进程
import time
from multiprocessing import Process


def task(x):
print('%s is runing %s'% x)
time.sleep(2)
print('%s is done' % x)

if __name__ == '__main__':
p = Process(target=task,args=('子进程',),name='超级进程')
p.daemon = True # 这个就是守护进程,如果是True则开启,守护的是父进程,当父进程执行完毕后子进程也会结束
#PS:这个p.daemon必须在开启主进程之前设置成守护进程
p.start()

print('主进程。。。') #这个代码执行完,就代表整个主进程执行完毕
 
守护进程实例
from multiprocessing import Process
import time
def foo():
print(123)
time.sleep(1)
print("end123")
def bar():
print(456)
time.sleep(3)
print("end456")
if __name__ == '__main__':
p1=Process(target=foo)
p2=Process(target=bar)
p1.daemon=True #这里将p1开启守护进程
p1.start()
p2.start()
time.sleep(2) #这里如果延迟1秒,则foo子进程内的end123不会运行,因为主进程和子进程是异步的
p.join() # 等待子进程执行完毕在执行主进程
print("main-------")

PS:当p1开启守护进程时候,主进程运行快与子进程,所以foo这段代码是不会运行,在主进程前设置延迟3秒,两个字进程内代码都会运行
PS:当主进程的延迟高于子进程,则子进程有足够的时间运行结束,所有子进程都能运行
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/shizhengquan/p/10231843.html