Python--多进程

多任务:指在同一时间执行多个任务
多任务的最大好处:充分利用CPU资源,提高程序的执行效率
多任务的表现形式
1.并发(任务数量大于CPU的核心数):在一段时间内交替去执行多个任务
单核CPU执行多任务,操作系统轮流让各个任务交替执行
2.并行(任务数量小于等于CPU的核心数):在一段时间内真正地同时执行多个任务

多进程

进程:进程是资源分配的最小单位,是操作系统进行资源分配和调度运行的基本单位(一个运行起来的任务至少有一个进程)

进程的创建步骤:

1.导入进程包
import multiprocessing
2.通过进程类创建进程对象
进程对象=multiprocessing.Process()
有三个参数:target:指定目标任务名(函数名)
name,进程名,一般不用设置
group,进程组,目前只能使用None
3.启动进程执行任务
进程对象.start()

import time
import multiprocessing

def test_A():
    for i in range(3):
        print("任务A")
        time.sleep(0.5)

def test_B():
    for i in range(3):
        print("任务B")
        time.sleep(0.5)

if __name__ == '__main__':

    process2 = multiprocessing.Process(target=test_B)
    #注意这里的函数不能带括号

进程执行带有参数的任务

args:以元组的形式传递参数
kwargs:以字典的形式传递参数

import time
import multiprocessing

def test_A(number,name):
    for i in range(number):
        print("任务A")
        print(name)
        time.sleep(0.5)

def test_B(number,name):
    for i in range(number):
        print("任务B")
        print(name)
        time.sleep(0.5)

if __name__ == '__main__':

    process2 = multiprocessing.Process(target=test_B,args=(3,"小于"))#注意这里的函数不能带括号
    process1 = multiprocessing.Process(target=test_A,kwargs={'number':3,"name":"小于"})
    process2.start()
    process1.start()

获取进程编号

进程编号的作用:方便进行进程管理
获取进程编号的两种方式:
1.获取当前进程的编号
os.getpid()
2.获取当前父进程的编号
os.getppid()
在程序启动时,系统会自动分配给程序一个主进程,定义的进程都是由这个主进程定义的,所以这两个子进程的父进程编号应相同。

import time
import multiprocessing
import os

def test_A(number,name):
    print("任务A的进程编号:",os.getpid())
    print("任务A的父进程编号:", os.getppid())
    for i in range(number):
        print("任务A")
        print(name)
        time.sleep(0.5)

def test_B(number,name):
    print("任务B的进程编号:", os.getpid())
    print("任务B的父进程编号:",os.getppid())
    for i in range(number):
        print("任务B")
        print(name)
        time.sleep(0.5)

if __name__ == '__main__':

    process2 = multiprocessing.Process(target=test_B,args=(3,"小于"))#注意这里的函数不能带括号
    process1 = multiprocessing.Process(target=test_A,kwargs={'number':3,"name":"小于"})
    process2.start()
    process1.start()

进程的注意点:

1.主进程会等待所有的子进程执行结束后再结束

import time
import multiprocessing
import os

def work():
    for i in range(10):
        print("工作中")
        time.sleep(0.2)

if __name__ == '__main__':
    work_process=multiprocessing.Process(target=work)
    work_process.start()
    #主进程睡眠一秒
    time.sleep(1)
    print("主进程执行完毕")

2.设置守护主进程(主进程一旦结束,子进程也随之结束)

import time
import multiprocessing
import os

def work():
    for i in range(10):
        print("工作中")
        time.sleep(0.2)

if __name__ == '__main__':
    work_process=multiprocessing.Process(target=work)
    work_process.daemon=True#一旦主进程结束,子进程也会销毁
    work_process.start()
    #主进程睡眠一秒
    time.sleep(1)
    print("主进程执行完毕")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值