python 实现并行计算加快速度

方法之一:运用多核CPU,进行python多进程计算,使用multiprocessing这个包。multiprocessing模块涵盖了一系列方法来处理并行执行例程。这包括进程,代理池,队列以及管道。
Pool.map()方法需要三个参数 - 在数据集的每个元素上调用的函数,数据集本身和chunksize。chunksize不是必须的。如果未明确设置,则默认chunksize为1。
示例:
import multiprocessing
import time
import os
print(“温馨提示:本机为”,os.cpu_count(),“核CPU”)

def func(msg):
print “msg:”, msg
time.sleep(3)
print “end”

if name == “main”:
#这里开启了4个进程
pool = multiprocessing.Pool(processes = 4)
for i in xrange(4):
msg = “hello %d” %(i)
pool.apply_async(func, (msg, ))

pool.close()
pool.join()   #调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束
print "Successfully"

方法之二:构建迭代器,调用并行算法,其核心是迭代器的构建
数据化处理的并行:使用pandas,尤其是需要操作dataframe这个数据结构,比如在机器学习特征工程的时候,需要对某一列(某个特征)做某一种操作(时间转化等等),df.map(func) 这种形式其实是非常适合做并行处理的(主要我们这里强调的是并行不是并发):
import pandas as pd
from sklearn.externals.joblib import Parallel, delayed
from tqdm import tqdm, tqdm_notebook ## 进度条
tqdm_notebook().pandas()
df = pd.read_csv(inputfile)
df = df.groupby(df.index) ##构建迭代器,用于并行,迭代器可以根据实际数据情况灵活处理
retlist = Parallel(n_jobs=jobNum)(delayed(youFunc)(group,Funcarg1,Funcarg12) for name, group in tqdm(df)) ## jobNum指开启的进程数目,youFunc自定义的数据处理函数
df = pd.concat(retlist)
使用这种方法的关键在于怎么构建一个类似迭代器的东西,在dataframe上面是使用了groupby。
非数据化处理的迭代器创建,需要用到yield,如文件的处理:
def _read_file(file_name):
while True:
line = file_name.readline()
if not line:
break
yield T_T(line)
df = _read_file(‘animal.txt’) ## 迭代器
retlist = Parallel(n_jobs=jobNum)(delayed(youFunc)(name,group) for name, group in tqdm(df)) ## 并行化处理

方法之三:使用os.system()方法
system()方法是os模块的一部分,它允许在与Python程序的单独进程中执行外部命令行程序。system()方法是一个阻塞调用,你必须等到调用完成并返回。
使用这种方法比我描述的先前方法要贵得多。 首先,开销要大得多(进程切换),其次,它将数据写入物理内存,比如一个需要更长时间的磁盘。 虽然这是一个更好的选择,你的内存有限(像RAM),而是可以将大量输出数据写入固态磁盘。

方法之四:使用子进程模块
该模块旨在替换os.system()和os.spawn()调用。子过程的想法是简化产卵过程,通过管道和信号与他们进行通信,并收集他们生成的输出包括错误消息。
从Python 3.5开始,子进程包含方法subprocess.run()来启动一个外部命令,它是底层subprocess.Popen()类的包装器。

方法三和四,参考:https://blog.csdn.net/dev_csdn/article/details/78424704?ops_request_misc=&request_id=&biz_id=102&utm_term=python%20%20%E5%B9%B6%E8%A1%8C&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-78424704.nonecase&spm=1018.2226.3001.4187

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

归去来?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值