ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

multiprocessing --- 基于进程的并行

2022-01-07 23:00:04  阅读:283  来源: 互联网

标签:count __ process 并行 --- 进程 print 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有