哪位大牛用过python 请帮忙解决 英文下这个问题

[转载]一位大牛整理的Python资源
一个论坛:
Python基本安装:
官方标准Python开发包和支持环境,同时也是Python的官方网站;
集成多个有用插件的强大非官方版本,特别是针对Windows环境有不少改进;
Python文档:
Python库参考手册。
可以代替Tutorial使用,有中文译版的入门书籍。
一本比较全面易懂的入门书,中文版翻译最近进步为很及时的5.4了。
建议采用的Python编码风格。
包括Python内容的一个挺全面的文档集。
函数参考手册
常用插件:
Python的数学运算库,有时候一些别的库也会调用里面的一些功能,比如数组什么的;
Python下著名的图像处理库Pil;
利用Python进行仿真、模拟的解决方案;
&&& * Matplotlib
据说是一个用来绘制二维图形的Python模块,它克隆了许多Matlab中的函数,用以帮助Python用户轻松获得高质量(达到出版水平)的二维图形;
python的加解密扩展模块;
提供与python有关的CJK语言支持功能:转码、显示之类。
Psyco、Pyrex:两个用于提高Python代码运行效率的解决方案;
Pyflakes、PyChecker、PyLint:都是用来做Python代码语法检查的工具。
基于wxWindows的易用且强大的图形界面开发包wxPython;
用Python帮助开发游戏的库,也可以用这个来播放视频或者音频什么的,大概依靠的是SDL;
win下将Python程序编译为可执行程序的工具,是一个让程序脱离Python运行环境的办法,也可以生成Windows服务或者COM组件。其他能完成Python脚本到可执行文件这个工作的还有Gordon
McMillan's
Installer、Linux专用的freeze以及py2app、setuptools等。不过此类工具难免与一些模块有一些兼容性的问题,需要现用现测一下。
嵌入式数据库:BerkeleyDB的Python版,当然还有其他的好多。
PEAK提供一些关于超轻量线程框架等基础性重要类库实现。
部分常用工具:
Java有Ant这个巨火的构建工具,Python的特性允许我们构建更新类型的构建工具,就是scons了。
&&& * Python
Sidebar for Mozilla FireFox的一个插件,提供一个用来查看Python文档、函数库的侧边栏。
&&& * IPython
很好用的Python
Shell。wxPython发行版还自带了PyCrust、PyShell、PyAlaCarte和PyAlaMode等几个工具,分别是图形界面Shell和代码编辑器等,分别具有不同特点可以根据自己的需要选用。
&&& * Easy
Install 快速安装Python模块的易用性解决方案。
推荐资源:
Parnassus山的拱顶巨大的Python代码库,包罗万象。既可以从上面下载代码参考学习,同时也是与Python有关程序的大列表。
Python号星际旅行船 著名Python社区,代码、文档、高人这里都有。
的Python程序设计知识数据库
Python程序设计知识库,都是与Python有关的程序设计问题及解决方法。
&&& * 啄木鸟
Pythonic 开源社区 著名的(也可以说是最好的)国内Python开源社区。
代码示例:
Limodou的NewEdit编辑器的技术手册,讨论了一些关于插件接口实现、i18实现、wxPython使用有关的问题,值得参考。
其他东西:
Nokia居然发布了在Series
60系统上运行Python程序(图形界面用wxPython)的库,还有一个Wiki页是关于这个的:
。Python4Symbian这个页面是记录的我的使用经验。
pyre:使用Python完成高性能计算需求的包,真的可以做到么?还没研究。
&&& * Parallel
Python:纯Python的并行计算解决方案。相关中文参考页面
Pexpect:用Python作为外壳控制其他命令行程序的工具(比如Linux下标准的ftp、telnet程序什么的),还没有测试可用程度如何。
pyjamas:Google GWT的Python克隆,还处在早期版本阶段。
Durus:Python的对象数据库。
有意思的东西:
Howie:用Python实现的MSN对话机器人。
Cankiri:用一个Python脚本实现的屏幕录像机。
ZDNET文章:学习Python语言必备的资源
&&& * Pythonic
Web 应用平台对比
在wxPython下进行图像处理的经验(其实,仅使用wxPython也可以完成很多比较基础的图像处理工作,具体可以参照《wxPython
in Action》一书的第12节)
通过win32扩展接口使用Python获得系统进程列表的方法
如何获得Python脚本所在的目录位置
Python的缩进问题
py2exe使用中遇到的问题
idle的中文支持问题
&&& * 序列化存储
Python 对象
Python IDE
我的IDE选择经验
一个基于Eclipse的、同时支持Python和PHP的插件,曾经是我最喜欢的Python
IDE环境,功能相当全了,不过有些细节不完善以致不大好用。
另一个基于Eclipse的,非常棒的Python环境,改进速度非常快,现在是我最喜欢的IDE。
用 Eclipse 和 Ant 进行 Python 开发
ERIC3 基于QT实现的不错的PYTHON
IDE,支持调试,支持自动补全,甚至也支持重构,曾经在Debian下用它,但图形界面开发主要辅助qt,我倾向wxpython,所以最后还是放弃了这个。
同时支持Win和Linux的源代码编辑器,似乎支持Python文件的编辑。
著名的基于WxPython的GUI快速生成用的Python IDE,但是开发进度实在太差了……
成熟的Python代码编辑器,号称功能介于EMACS和IDLE之间的编辑器。
SPE:号称是一个Full Featured编辑器,集成WxGlade支持GUI设计。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。要用python从几百万行数据的文件一行行读数据并计算,如何处理最快,哪位大牛可以指点一下
[问题点数:20分,结帖人yfh]
要用python从几百万行数据的文件一行行读数据并计算,如何处理最快,哪位大牛可以指点一下
[问题点数:20分,结帖人yfh]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2014年8月 其他开发语言大版内专家分月排行榜第二2014年7月 其他开发语言大版内专家分月排行榜第二2014年5月 其他开发语言大版内专家分月排行榜第二2014年4月 其他开发语言大版内专家分月排行榜第二2014年3月 其他开发语言大版内专家分月排行榜第二2014年1月 其他开发语言大版内专家分月排行榜第二2013年12月 其他开发语言大版内专家分月排行榜第二2013年11月 其他开发语言大版内专家分月排行榜第二2013年3月 其他开发语言大版内专家分月排行榜第二2012年5月 其他开发语言大版内专家分月排行榜第二2012年4月 其他开发语言大版内专家分月排行榜第二2010年10月 其他开发语言大版内专家分月排行榜第二2010年9月 其他开发语言大版内专家分月排行榜第二
2013年9月 其他开发语言大版内专家分月排行榜第三2012年6月 其他开发语言大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。Mongodb 千万级数据在 python 下的综合压力测试及应用探讨
曾经在收集数据的项目中,用过 mongodb 的数据存储,但是当数据很大的时候,还是比较的吃力。很可能当时的应用水平不高,也可以是当时的服务器不是很强。 所以这次能力比以前高点了,然后服务器比以前也高端了很多,好嘞 ~再测试下。
(更多的是单机测试,没有用复制分片的测试 ~)!
相比较 MySQL,MongoDB 数据库更适合那些读作业较重的任务模型。MongoDB 能充分利用机器的内存资源。如果机器的内存资源丰富的话,MongoDB 的查询效率会快很多。
这次测试的服务器是 dell 的 r510!
内存还行,是 48 G 的,本来想让同事给加满,但是最终还是没有说出口 ~
磁盘是 10 个 2T 的,但是因为格式化的时间太久了,哥们直接把其他的硬盘给拔出来了,就用了三个盘。。。data 目录没有做 raid,是为了让他们体现更好的硬盘速度。
既然说好了是在 python 下的应用测试,那就需要安装 mongodb python 下的模块!
对了,不知道 mongodb-server 的安装要不要说下?
cat /etc/yum.repos.d/10.repo
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
Pymongo 的基本用法
from pymongo import * # 导包
con = Connection(...) # 链接
db = con.database # 链接数据库
db.authenticate('username', 'password') # 登录
db.drop_collection('users') #删除表
db.logout() # 退出
db.collection_names() # 查看所有表
db.users.count() # 查询数量
db.users.find_one({'name' : 'xiaoming'}) # 单个对象
db.users.find({'age' : 18}) # 所有对象
db.users.find({'id':64}, {'age':1,'_id':0}) # 返回一些字段 默认_id总是返回的 0不返回 1返回
db.users.find({}).sort({'age': 1}) # 排序
db.users.find({}).skip(2).limit(5) # 切片
测试的代码:
#!/usr/bin/env python
from pymongo import Connection
import time,datetime
import os,sys
connection = Connection('127.0.0.1', 27017)
db = connection['xiaorui']
def func_time(func):
def _wrapper(*args,**kwargs):
start = time.time()
func(*args,**kwargs)
print func.__name__,'run:',time.time()-start
return _wrapper
@func_time
def ainsert(num):
posts = db.userinfo
for x in range(num):
post = {"_id" : str(x),
"author": str(x)+"Mike",
"text": "My first blog post!",
"tags": ["xiaorui", "xiaorui.cc", "rfyiamcool.51cto"],
"date": datetime.datetime.utcnow()}
posts.insert(post)
if __name__ == "__main__":
num = sys.argv[1]
ainsert(int(num))
咱们就先来个百万的数据做做测试~
综合点的数据:
在 top 下看到的程序占用资源的情况 ~ 我们看到的是有两个进程的很突出,对头 ! 正是 mongodb 的服务和我们正在跑的 python 脚本!
看下服务的 io 的情况 ~
脚本运行完毕,总结下运行的时间 ~
查看 mongodb 的状态~
他的 insert 也不到 5k ~ 插入量也就 800k 左右 ~
它的输出有以下几列:
inserts/s 每秒插入次数
query/s 每秒查询次数
update/s 每秒更新次数
delete/s 每秒删除次数
getmore/s 每秒执行 getmore 次数
command/s 每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令
flushs/s 每秒执行 fsync 将数据写入硬盘的次数。
mapped/s 所有的被 mmap 的数据量,单位是 MB,
vsize 虚拟内存使用量,单位 MB
res 物理内存使用量,单位 MB
faults/s 每秒访问失败数(只有 Linux 有),数据被交换出物理内存,放到 swap。不要超过 100,否则就是机器内存太小,造成频繁 swap 写入。此时要升级内存或者扩展
locked % 被锁的时间百分比,尽量控制在 50% 以下吧
idx miss % 索引不命中所占百分比。如果太高的话就要考虑索引是不是少了
q t|r|w 当 Mongodb 接收到太多的命令而数据库被锁住无法执行完成,它会将命令加入队列。这一栏显示了总共、读、写 3 个队列的长度,都为 0 的话表示 mongo 毫无压力。高并发时,一般队列值会升高。
conn 当前连接数
time 时间戳
瞅下面的监控数据!
然后我们在测试下在一千万的数据下的消耗时间情况 ~
共用了 2294 秒,每秒插入 4359 个数据 ~
看看他的内存的使用情况:
虚拟内存在 8 gb 左右,真实内存在 2 gb 左右
再换成多线程的模式跑跑 ~
个人不太喜欢用多线程,这东西属于管你忙不忙,老大说了要公平,我就算抢到了,但是没事干,我也不让给你。。。属于那种蛮干的机制 ~
nima,要比单个跑的慢呀 ~
线程这东西咋会这么不靠谱呀 ~
应该是没有做线程池 pool,拉取队列。导致线程过多导致的。不然不可能比单进程都要慢~
还有就是像这些涉及到 IO 的东西,交给协程的事件框架更加合理点 !!!
def goodinsert(a):
posts.insert(a)
def ainsert(num):
for x in range(num):
post = {"_id" : str(x),
"author": str(x)+"Mike",
"text": "My first blog post!",
"tags": ["mongodb", "python", "pymongo"],
"date": datetime.datetime.utcnow()}
goodinsert(post)
a=threading.Thread(target=goodinsert,args=(post,))
python 毕竟有 gil 的限制,虽然 multiprocess 号称可以解决多进程的。但是用过的朋友知道,这个东西更不靠谱 ~
属于坑人的东西 ~
要是有朋友怀疑是 python 的单进程的性能问题,那咱们就用 supervisord 跑了几个后台的 python 压力脚本 ~ supervisord 的配置我就不说了,我以前的文章里面有详述的 ~
cpu 方面是跑的有点均匀了,但是 mongodb 那边的压力总是上不去
当加大到 16 个后台进程做压力测试的时候 ~ 大家会发现 insert 很不稳定。 看来他的极限也就是 2 MB 左右的数据 ~
当减少到 8 个压力进程的时候 ~ 我们发现他的 insert 慢慢的提供到正常了,也就是说
他真的是 2 MB 的极限 ~
脚本里面是有做有序的 id 插入的,我们试试把 id 的插入给去掉,看看有没有提升~
结果和不插入 id 差不多的结果 ~
调优之后~ 再度测试
ulimit 的优化
cat /etc/security/limits.conf
内核的 tcp 优化
cat /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestsmps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_wmem =
net.ipv4.tcp_rmem =
net.ipv4.tcp_mem = 00
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_fin_timeout = 30
/sbin/sysctl -p
启动的时候,加上多核的优化参数
多核问题可以在启动时加入启动参数: numactl --interleave=all
insert 的频率已经到了 2 w 左右 ~
内存占用了 8 G 左右 ~
我想到的一个方案:
当然不用非要 celery,就算咱们用 socket 写分发,和 zeromq 的 pub sub 也可以实现这些的。这是 celery 的调度更加专业点。
刚才我们测试的都是insert,现在我们再来测试下在千万级别数据量下的查询如何:
查询正则的,以2开头的字符
posts = db.userinfo
for i in posts.find({"author":re.compile('^2.Mike')}):
精确的查询:
查询在 5s 左右 ~
典型的高读低写数据库!
本文出自 “峰云,就她了。” 博客,谢绝转载!}

我要回帖

更多关于 请帮忙解决 英文 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信