系统相关
首页 > 系统相关> > multiprocessing --- 基于进程的并行

multiprocessing --- 基于进程的并行

作者:互联网

前言

multiprocessing — 基于进程的并行。弄懂了多线程,对于多进程也就比较好理解了。现在市场上个人PC、公司服务器都是多核,多CPU机器,充分利用CPU的计算能力,常用多进程实现并行。

多进程详情API 中文手册已经讲解得比较详细:https://docs.python.org/zh-cn/3/library/multiprocessing.html#


一、multiprocessing 是什么?

multiprocessing 是一个支持使用与 threading 模块类似的 API 来产生进程的包。 multiprocessing 包同时提供了本地和远程并发操作,通过使用子进程而非线程有效地绕过了 全局解释器锁。 因此,multiprocessing 模块允许程序员充分利用给定机器上的多个处理器。 它在 Unix 和 Windows 上均可运行。
multiprocessing 模块还引入了在 threading 模块中没有的API。一个主要的例子就是 Pool 对象,它提供了一种快捷的方法,赋予函数并行化处理一系列输入值的能力,可以将输入数据分配给不同进程处理(数据并行)。下面的例子演示了在模块中定义此类函数的常见做法,以便子进程可以成功导入该模块。

二、使用步骤

1. 多进程模块概念图

在这里插入图片描述

2. 多进程初级代码示例

简单的创建多进程的方法,和线程一模一样。

# -*- coding:utf-8 -*-

'''该文件 学习多进程, 多进程类比多线程进行学习, 重点关注如下几个问题
    1、 怎么启动多进程?
    2、 多进程之间如何通信?
    3、多进程之间如何同步?
    4、多进程之间如何共享?
    5、多进程如何管理?
'''

from multiprocessing import Process
import os, time

def info(title):
    '''获取进程一些信息'''
    print(title)
    print('module name:', __name__)
    print('parent process:', os.getppid())
    print('process id:', os.getpid())

def add(num):
    info('add process')
    count = 0
    for i in range(num):
        print('add %d' %i)
        count += num
    print(count)

def multi(num):
    info('mulit process')
    count = 10
    for i in range(1, num):
        print('multi %d' %i)
        count = count*i
        # print("current %d" %count)
    print(count)


if __name__=="__main__":
    print('main process start ...'+'*'*100)
    info('main process')
    p_add = Process(target=add, args=(10,))
    p_mulit = Process(target=multi, args=(59,))

    p_list = []
    p_list.append(p_add)
    p_list.append(p_mulit)

    for p in p_list:
        p.start()
    
    for p in p_list:
        p.join()

    print('main process end ...'+'*'*100)



总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

标签:count,__,process,并行,---,进程,print,multiprocessing
来源: https://blog.csdn.net/qq_40494873/article/details/122373905