进程的常见功能

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()
上一篇 下一篇

猜你喜欢

热点阅读