python-Process创建进程(精简)

概述

python为了提高运行效率,可以 创建进程,让CPU同时执行多个任务

应用场景

计算密集型的任务主要消耗CPU,所以计算密集型的任务一般使用多进程。
如:科学计算、视频解码

操作系统与创建进程

为了提高运行效率,主流操作系统提供创建进程的函数,供程序员调用。

注意:不同的操作系统,提供创建进程的 函数 可能不同,UNIX、linux、Mac OS相同,但MS Windows系统与前几种不同。

由于python是跨平台的,通过类
multiprocessing.Process 可以在主流操作系统中实现创建进程的功能

例子

模拟一个进程 读取1T的大文件,读取速度慢

import time
import os

def task():
    # 模拟耗时任务,如:读取1T文件
    for i in range(101):
        print("读取文件,进度:{}%".format(i))
        time.sleep(0.5)


print("pid:{},父pid:{}".format(os.getpid(),os.getppid()))
task()

Process使用说明

创建对象

语法:

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

参数说明:

  • group:一般不使用
  • target:表示调用对象
  • name:为别名
  • args:表示调用对象的位置参数元组
  • kwargs:表示调用对象的关键字参数字典

常用属性

  • name:当前进程别名,在实例化时通过参数name指定,默认为Process=N,N为从1开始递增的整数

  • pid:当前进程实例的pid

常用方法

例子:多进程读取文件

2个进程读取大文件,速度会快一半

import time
import os
from multiprocessing import Process

def task():
    # 模拟耗时任务,如:读取1T文件的前50%
    for i in range(51):
        print("子进程:{},父进程:{},读取文件,进度{}".format(os.getpid(),os.getppid(),i))
        time.sleep(0.5)

def task2():
    # 模拟耗时任务,如:读取1T文件的后50%
    for i in range(51,101):
        print("子进程:{},父进程:{},读取文件,进度{}".format(os.getpid(),os.getppid(),i))
        time.sleep(0.5)

if __name__ == "__main__":

    print("主程序pid:{},父pid:{}".format(os.getpid(),os.getppid()))
    # 创建子进程,该子进程执行 task() 函数
    p1 = Process(target=task)
    # 启动子进程
    p1.start()

    # 再创建子进程,该子进程执行 task2() 函数
    p2 = Process(target=task2)
    # 启动子进程
    p2.start()

原文出处:/show_1IX5dHsBZfwu.html