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</
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈哈钟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值