Python进阶(三) -- 进程

进程(Process)是资源分配的最小单位,也是线程的容器。

进程以及状态

概念

进程(Process)是资源分配的最小单位,也是线程的容器。

程序:也就是一个静态的软件。

进程:一个程序运行起来后,代码+用到的资源称为进程,是操作系统中分配资源的基本单元。

程序是固定不变的,而进程会根据运行需要,让操作系统分配资源的。

进程的状态

任务数往往大于CPU核数,所以肯定会有一些任务在执行,另一部分在等待执行,所以有了不同的状态。

  • 就绪态:运行条件都已经满足,正在等待CPU执行。
  • 执行态:CPU正在执行其功能
  • 等待态:等待某些条件满足。

进程的创建

multiprocessing模块是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情。

创建子进程

步骤:

  1. 导入模块
  2. 通过模块提供的Process类创建进程
  3. 启动进程

案例:

import multiprocessing
import time



def work1():
    for i in range(10):
        print('正在完成work1.......')
        time.sleep(0.5)


if __name__ == '__main__':
    # 1. 导入模块
    # 2.通过模块提供的Process类创建进程
    process_work1 = multiprocessing.Process(target=work1)
    # 3.启动进程
    process_work1.start()

Process语法结构:

Process([group[,target[,name[,args[,kwargs]]]]])

  • target:传递函数的引用,这个子进程就执行这个函数的代码
  • args:给target指定的函数以元组的形式传参数
  • kwargs:给target指定的函数以字典的形式传参数
  • name:给进程设定名称
  • group:指定进程组

Process创建的实例对象的常用方法:

  • start():启动子进程
  • is_alive:判断子进程是否存活
  • join():是否等待子进程执行结束,或者等待多长时间
  • terminate():不管任务是否完成,立即终止子进程

Process创建的实例对象的常用属性:

  • name:当前进程的别名
  • pid:当前进程的pid(进程号)

进程信息

  • 获取进程名称:

    1. multiprocessing.current_process()
    2. 创建子进程后
    子进程.name
    
  • 获取进程编号:

    1. multiprocessing.current_process().pid
    2. 子进程.pid
    3. 利用os模块os.getpid()
    
  • 获取进程父id

    os.getppid()
    

案例:

import multiprocessing
import os
import time

'''
1. 导入模块
2. 通过模块提供的Process类创建进程
3. 启动进程
'''


def work1():
    for i in range(10):
        # 获取进程信息
        print('子进程信息:', multiprocessing.current_process())
        # 获取进程编号
        print('进程id:', multiprocessing.current_process().pid)
        # 使用os模块
        print('进程id:', os.getpid())
        # 获取进程父id
        print('进程父id:', os.getppid())
        print('正在完成work1.......')
        time.sleep(2)


if __name__ == '__main__':
    # 主进程信息
    print('主进程信息:', multiprocessing.current_process())
    # 1. 导入模块
    # 2.通过模块提供的Process类创建进程
    process_work1 = multiprocessing.Process(target=work1)
    # 3.启动进程
    process_work1.start()
    # 获取process的信息
    print('process_work1的全部信息:', process_work1)
    print

你可能感兴趣的:(python,python,linux,开发语言)