进程的常见功能
2022-01-30 本文已影响0人
测试探索
一:常见功能
第一部分
1.p.start(),当前进程准备就绪,等待被CPU调度(工作单元其实是进程中的线程)。
2.p.join(),等待当前进程的任务执行完毕后再向下继续执行
import time
import multiprocessing
def task(arg):
print("执行中。。。")
time.sleep(2)
if __name__ == '__main__':
multiprocessing.set_start_method("spawn")
p = multiprocessing.Process(target = task ,args = (2,))
p.start()
p.join()
print("主进程等子进程执行完毕再结束")
image.png
第二部分:守护进程
1.p.daemon = 布尔值,守护进程(必须放在start之前)
p.daemon = True ,设置为守护进程,主进程执行完毕后,子进程也自动关闭
import time
import multiprocessing
def task(arg):
time.sleep(2)
print("执行中。。。")
if __name__ == '__main__':
multiprocessing.set_start_method("spawn")
p = multiprocessing.Process(target = task ,args = (2,))
p.daemon = True
p.start()
print("主进程不等子进程执行完毕直接结束,所以task方法里的执行中不会被打印")
image.png
p.daemon = False,设置为非守护进程,主进程等待子进程,子进程执行完毕后,主进程才结束。
import time
import multiprocessing
def task(arg):
time.sleep(2)
print("执行中。。。")
if __name__ == '__main__':
multiprocessing.set_start_method("spawn")
p = multiprocessing.Process(target = task ,args = (2,))
p.daemon = False
p.start()
print("主进程等子进程执行完毕后,主进程才结束")
二:进程名称的设置与获取
进程名称的获取
import time
import multiprocessing
def task(arg):
time.sleep(2)
print("当前进程的名称:",multiprocessing.current_process().name)
if __name__ == '__main__':
multiprocessing.set_start_method("spawn")
p = multiprocessing.Process(target = task ,args = (2,))
p.name = "哈哈哈哈哈"
p.start()
print("继续执行")
image.png
子进程与父进程的pid获取
import time
import multiprocessing
import os
def task(arg):
print("子进程的pid:",os.getpid())
print("父进程的pid:",os.getppid())
time.sleep(2)
print("当前进程的名称:",multiprocessing.current_process().name)
if __name__ == '__main__':
print("主进程的pid:",os.getpid())
multiprocessing.set_start_method("spawn")
p = multiprocessing.Process(target = task ,args = ("xxx",))
p.name = "哈哈哈哈哈"
p.start()
print("继续执行")
image.png
在子进程里,打印该子进程的线程数
import os
import time
import threading
import multiprocessing
def func():
time.sleep(3)
def task(arg):
for i in range(10):
t = threading.Thread(target = func)
t.start()
print("子进程的pid:",os.getpid())
print("父进程的pid:",os.getppid())
print("线程个数:",len(threading.enumerate()))
time.sleep(2)
print("当前进程的名称:",multiprocessing.current_process().name)
if __name__ == '__main__':
print("主进程的pid:",os.getpid())
multiprocessing.set_start_method("spawn")
p = multiprocessing.Process(target = task ,args = ("xxx",))
p.name = "哈哈哈哈哈"
p.start()
print("继续执行")
image.png
三:自定义进程类
image.png四:CPU个数,程序一般创建多个进程
multiprocessing.cpu_count()