起因

Python处理一下数据,大概有六七个G,然后再存到另外一个文件中,单线程跑起来发现太慢了,数据总量大概是千万行的级别,然后每秒钟只能处理不到20行……遂想怎么提高一下速度

尝试1-multiprocessing

代码如下:

from multiprocessing.dummy import Pool as ThreadPool

pool = ThreadPool(20)
pool.map(func_name, args)
pool.close()
pool.join()

这里参考了这篇文章,然后尝试了一下,发现速度并没有多少提示,看了一下资源使用率,只占满了1个核,不能满足要求

尝试2-dask

dask是一个用于大规模数据存储与读取、并行计算的库,项目地址:https://github.com/dask

代码如下:

from dask import delayed

import dask.bag as db
L = []
for fn in encrypt_files:
b = db.read_text(fn)
a = delayed(decrypt_file)(fn) # Delay execution of function
L.append(a)
result = delayed(L)
result.compute()

这个地方参考了这篇文章,但是尝试了一下,还是只跑了一个核,依然失败

尝试3-pp

pp也是并行计算的库,项目地址:http://www.parallelpython.com/

代码如下:

cpu_num = 1
job_server = pp.Server(cpu_num)
a = []
for f in fn:
a.append(job_server.submit(fun_name, (f, ), (fun_1, fun_2, ), ('sys', 'datetime', 'pp', )))
for x in a:
tmp = x()

这里参考这篇文章,测试了一下,可以跑满多个核心,其使用的CPU核心数量就是设定的那个数量。

但是也存在一个问题,就是程序跑一段时间后就会效率下降,监控一下CPU发现也只剩下一个核心在跑了,目前还不知道是什么原因,也没有深究

对比

平时最常有的应该是multiprocessing模块,网上的资料大多也都是这个,做数据分析的可能dask模块会用到,pp模块就更少了。但是实际上在我这里测试,前两者达不到我的要求,其最多也跑了一个核心,不知道是不是我代码使用的问题。

至于pp模块,需要注意的是全局变量的定义,可能需要在函数里重新定义,不然可能会提示变量未定义的错误。

过程

开始尝试的时候效果不尽人意,在v2ex上问了一下大家,可以围观下面这两个帖子:

其实最终也没有达到我的要求,还存在着一部分问题,可能最终还是需要靠集群去实现这个方案。

感想

围观v2的帖子,发现其实找出瓶颈才是最关键的…最终发现我的瓶颈是在处理数据的部分,RSA解密太耗时了,然后就应该考虑怎么提高这部分效率。

有人说换语言,实际上提高十倍也并不满足这个要求,可能提高十倍效率同时使用多核心可以满足…这个时候就该考虑换个思路了

比方说用集群(还未实现),或则说直接换语言,同时跑多核心。

PS

感谢各位热心网友

Python处理大数据的更多相关文章

  1. Python/Numpy大数据编程经验

    Python/Numpy大数据编程经验 1.边处理边保存数据,不要处理完了一次性保存.不然程序跑了几小时甚至几天后挂了,就啥也没有了.即使部分结果不能实用,也可以分析程序流程的问题或者数据的特点.   ...

  2. 黑马基础阶段测试题:创建一个存储字符串的集合list,向list中添加以下字符串:”C++”、”Java”、” Python”、”大数据与云计算”。遍历集合,将长度小于5的字符串从集合中删除,删除成功后,打印集合中的所有元素

    package com.swift; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; ...

  3. 【Python开发】Python 适合大数据量的处理吗?

    Python 适合大数据量的处理吗? python 能处理数据库中百万行级的数据吗? 处理大规模数据时有那些常用的python库,他们有什么优缺点?适用范围如何? 需要澄清两点之后才可以比较全面的看这 ...

  4. 为什么说Python 是大数据全栈式开发语言

    欢迎大家访问我的个人网站<刘江的博客和教程>:www.liujiangblog.com 主要分享Python 及Django教程以及相关的博客 交流QQ群:453131687 原文链接 h ...

  5. python学习--大数据与科学计算第三方库简介

    大数据与科学计算  库名称 简介 pycuda/opencl GPU高性能并发计算 Pandas python实现的类似R语言的数据统计.分析平台.基于NumPy和Matplotlib开发的,主要用于 ...

  6. 菜鸟学python之大数据的初认识

    这次作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2639 1.这些分析所采用数据来源是什么? 国家数据库:中国铁路 ...

  7. python模拟大数据登陆

    #针对tableu 撰写的大数据框架 #tesseract 识别简单的验证码 不多说  直接上代码 # coding:utf-8 from selenium import webdriver from ...

  8. Twitter数据挖掘:如何使用Python分析大数据

    我们可以创建变量来存放待拉取的微博数量(即count),以及待拉取的用户(即name).然后用这两个参数调用user_timeline()函数.下面是更新后的代码(注意,在代码的顶部应该保持认证和AP ...

  9. Twitter数据挖掘:如何使用Python分析大数据 (3)

    让我们来拉取Twitter账号@NyTimes的最近20条微博. 我们可以创建变量来存放待拉取的微博数量(即count),以及待拉取的用户(即name).然后用这两个参数调用user_timeline ...

随机推荐

  1. SqlServer整库备份还原脚本

    最近领导要求定时备份数据库(不是我的作业), 搜了一下资料还不少, 先mark一下, 得空再验证吧!!! 以下内容为转载 转自:https://www.cnblogs.com/want990/p/74 ...

  2. lua一些特殊函数说明

    setclLvalue(L, L->top, cl); 这是个宏展开是这样: ((L->top)->value_).gc = obj2gco(cl); //top valud gc ...

  3. 搭建HBase+thrift+php环境

    http://www.beauty-soft.net/blog/ceiba/hadoop/2013-05-19/644.html http://www.360doc.com/content/11/07 ...

  4. 纯CSS兑现侧边栏/分栏高度自动相等(转)

    这里直接介绍我认为的最佳的侧边栏/分栏高度自动相等方法.核心的CSS代码如下(数值不固定): margin-bottom:-3000px; padding-bottom:3000px; 再配合父标签的 ...

  5. librbd 分析

    一.概述

  6. appium简明教程(11)——使用resource id定位(仅支持安卓4.3以上系统)

    上一节乙醇带大家了解了appium的定位策略.实际上appium的控件定位方式是完全遵守webdriver的mobile扩展协议的. 这一节将分享一下如何使用resource id来定位android ...

  7. js 获取元素所有兄弟节点实例

    比如一个ul里面有10个li,而第3个li上有特殊的样式(比如颜色为红色,其他为黑色).我想把其他所有li——不包括红的li——的颜色也设为红色,此时,就需要获得红li的所有兄弟节点. 兄弟,就是和你 ...

  8. python 多进程,实际上都没有运行,sleep

    进程以及状态 1. 进程程序:例如xxx.py这是程序,是一个静态的 进程:一个程序运行起来后,代码+用到的资源 称之为进程,它是操作系统分配资源的基本单元. 不仅可以通过线程完成多任务,进程也是可以 ...

  9. js 什么是深拷贝问题?

    一.什么是值类型? 二.什么是引用类型? 三.使用ES Next新特性带来的 Object.assign 方法 和 扩展运算符: 四.Object.assign 方法 和 扩展运算符的 “深入浅出” ...

  10. flowable 中task的相关操作

    1 获取任务列表 1)获取候选人的任务列表 TaskService taskService = processEngine.getTaskService(); List<Task> tas ...