起因

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. Learning to Rank:Point-wise、Pair-wise 和 List-wise区别

    机器学习的 ranking 技术——learning2rank,包括 pointwise.pairwise.listwise 三大类型. [Ref-1]给出的: <Point wise rank ...

  2. 树莓派进阶之路 (007) - 树莓派安装cmake3.5 脚本(原创)

    cmake3.5安装脚本: #!/bin/bash cd echo "安装make" sudo apt-get install make echo "安装cmake&qu ...

  3. 在触屏设备上面利用html5裁剪图片(转)

    前言 现在触屏设备越来越流行,而且大多数已经支持html5了.针对此,对触屏设备开发图片裁剪功能, 让其可以直接处理图片,减轻服务端压力. 技术点 浏览器必须支持html5,包括fileReader, ...

  4. mysql开发常用小结

    1.时间转换 时间戳转时间   FROM_UNIXTIME 比如  FROM_UNIXTIME(1449480551/1000,'%Y-%m-%d %H:%i:%s') 如果是精确到毫秒的时间戳,则必 ...

  5. centos yum源

    #remi的源 rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm rpm --import /etc/pki/r ...

  6. 转 mongodb win7 32位系统安装以及配置

    mongodb win7 32位系统安装以及配置   今天安装 win7 32位系统 mongodb 费了好大劲..记录一下,希望相同的同学可以少踩点坑. 1.安装 我安装的是3.2.4  地址:ht ...

  7. Oracle 客户端连接时报ORA-01019错误总结

    在.net+oracle开发中,发布web程序的时候,有是会遇到该错误 ora-01019 ORA-01019 unable to allocate memory in the user sideCa ...

  8. supervisor 完整安装步骤

    Supervisorhttp://www.jianshu.com/p/bf2b3f4dec73http://www.jianshu.com/p/9abffc905645http://blog.csdn ...

  9. Spring Security教程(二):通过数据库获得用户权限信息

    上一篇博客中,Spring Security教程(一):初识Spring Security,我把用户信息和权限信息放到了xml文件中,这是为了演示如何使用最小的配置就可以使用Spring Securi ...

  10. iOS 再谈 代理传值,block反向传值

    本贴的例子是:有A和B两个界面,要实现的效果就是先让A跳转到B,然后B中有个颜色的参数,当B跳转到A时,把这个颜色的参数传递给A,在A中利用这个颜色改变自己界面的颜色. 第1步:在发送者(界面B)中, ...