小组python学习任务4之python中进程的并行处理

python中多进程的数据处理

多进程 (Multi-Process) 和多线程 (Multi-Thread) 最大的区别是,多进程是在各自单独的进程内存管理下运行代码,而多线程是共享一个进程内存。在各自单独的进程管理下,多进程的明显优势是可以最大的利用计算机多核心的处理能力。但是多进程也有其劣势,比如说在进程之间通信需要 IPC (Inter Process Communication) 工具,而不像多线程那样可以共享内存数据。

鉴于点云的批处理,开始研究python中的并行处理

1、整体思路先把整个的点云数据分块处理(可以根据自己电脑CPU的内核的数量分块,在Intel i7或者以上的版本的芯片,可以得到一个乘以2的数字,主要是得益于超线程(Hper-Threading)结构)

2、速度明显的加快,(以自己为例,采用单核计算,耗时在 7个小时以上的程序,采用多核(12个核)计算耗时为752.12秒)

 

示例代码

import math
import datetime
import multiprocessing as mp


def train_on_parameter(name, param):
    result = 0
    for num in param:
        result += math.sqrt(num * math.tanh(num) / math.log2(num) / math.log10(num))
    return {name: result}


if __name__ == '__main__':

    start_t = datetime.datetime.now()

    num_cores = int(mp.cpu_count())
    print("本地计算机有: " + str(num_cores) + " 核心")
    pool = mp.Pool(num_cores)
    param_dict = {'task1': list(range(10, 30000000)),
                  'task2': list(range(30000000, 60000000)),
                  'task3': list(range(60000000, 90000000)),
                  'task4': list(range(90000000, 120000000)),
                  'task5': list(range(120000000, 150000000)),
                  'task6': list(range(150000000, 180000000)),
                  'task7': list(range(180000000, 210000000)),
                  'task8': list(range(210000000, 240000000))}
    results = [pool.apply_async(train_on_parameter, args=(name, param)) for name, param in param_dict.items()]
    results = [p.get() for p in results]

    end_t = datetime.datetime.now()
    elapsed_sec = (end_t - start_t).total_seconds()
    print("多进程计算 共消耗: " + "{:.2f}".format(elapsed_sec) + " 秒")

3、如何想要循环这个多核计算的过程,需要在每次循环结束后关闭进程

pool.close()

4、程序运行时,可以在任务管理器中看到CPU的状态以及进程

 

 

 

参考知乎 https://zhuanlan.zhihu.com/p/93305921

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值