01 基于进程的并行- Python多进程编程

本文介绍了Python中的多进程编程,包括进程的基本概念、状态,以及如何使用multiprocessing模块实现简单示例、生产者消费者模型和回调函数。在处理计算密集型任务时,多进程能有效提高执行效率,通过将任务分解为可序列化的函数参数,实现并行执行。
摘要由CSDN通过智能技术生成

  在Python里面,由于有全局解释器锁的存在,在同一时刻只能有一个线程在执行,因此如果是计算密集型的任务,要想实现并行,需要采用多进程编程。

1、基本概念

1.1 进程的概念

  进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

1.2 进程的状态

  进程执行时的间断性,决定了进程可能具有多种状态。事实上,运行中的进程可能具有以下三种基本状态。
   1)就绪状态(Ready):
  进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。
   2)运行状态(Running):
  进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。
   3)阻塞状态(Blocked):
  由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。该事件发生前即使把处理器资源分配给该进程,也无法运行。

在这里插入图片描述

1.3 什么情况下使用多进程

  当一个计算任务可以对输入数据分别进行处理的时候,可以使用多进程编程提高任务执行的效率。开启的进程数可以是小于等于cpu核心数的一个值。

2、Python实现多进程

2.1 简单示例

  在Python里面,可以通过 multiprocessing 模块在程序中创建、管理进程。
  第一种方式可以使用 Process 类,下面代码创建了3个进程对输入数据进行处理。首先定义一个对数据进行处理的函数,在下面代码中这个函数是 t1 ,然后把要处理的数据序列中的数值分别作为3个进程调用函数 t1 的参数:

import os
import time
import random
from multiprocessing import Process
from multiprocessing import Pool


def t1(tmp):
    print(tmp, 'starting;', '线程ID是', os.getpid())           # 打印当前开启的进程的 ID
    time.sleep(random.randrange(1,5))                          # 让进程持续随机的几秒
    print(tmp, 'end')                                          # 进程结束

if __name__ == '__main__':
    for i in range(3):
        p = Process(target=t1, args=(i,))
        p.start()                                              # 启动进程

    print('主线程', '线程ID是', os.getpid())                      # 打印主进程的ID

  输出的结果如下:

# 在这里开启子进程之后没有用join方法启动守护进程,所以主进程先执行完
主线程 线程ID是 19665	
0 starting; 线程ID是 19667
1 starting; 线程ID是 19668
2 starting; 线程ID是 19669
1 end
0 end
2 end

  第二种创建和使用进程的方式是用 Pool 类,创建一个进程池管理多个进程。进程池

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值