python做一个本地搜索_python本地文件搜索整理

(2012-12-08 22:38:16)

标签:

python

本地文件搜索

多进程通信

数据库

杂谈

分类:

Programming

最近再做一个本地文件搜索的东西,一个星期每天早上八点起到晚上十点都呆在自习室,

终于摸点东西出来了,可是不幸的是刚要完成的时候手机就掉了,哎

~

手机掉了没关系,关

键是里面有我太多的过去,

什么东西都不能存在电脑或者手机上啊,

于是乎我决定以后将东

西发在别人的服务器上,好,开始

作为本地文件搜索来说,微软自带的资源浏览器有一个版本,但是那个估计是及时遍历,

因此速度很慢,

它也会提示建立索引或很快,

因此先要找到一个存放索引的地方,

首先的就

是数据库,毕竟本地文件多达十几万几百万,数据库的确好管理。选择的是

sqlite

数据库,

因为作为一个软件他需要一个轻量级的东西,

如果还需要用户附带安装一个

mysql

服务就不

靠谱了

然后就是数据库表的建立,

其实来说保存文件名就行了,

最初的想法是建立两个表,

一个

文件表,存放文件和它的父目录,然后一个目录列表,保存目录和它的父目录。才想到文件

和目录其实是一个东西,

根本没有必要分开,

就用一个简单的文件,

父目录代替。

够简单了。

基础想法是遍历目录然后将数据存进数据库,

边遍历边插数据的方法显然是不靠谱的,

就单

进程或者单线程来说必然运势时间过长。

然后就想用多线程实现吧,

用多线程遍历目录,

每个线程的任务分开,

因此不存在所谓的数据共享的问题,

每个线程做自己的事情,

确实遍

历的效果不错,

60

秒左右就完成遍历了。但是插入数据的速度让人无法忍受,后来查询数

据库的优化,才知道原来数据库每秒可以插入几百万条数据但是每秒只能提交十几个事务,

因此不要频繁提交事务是事情的关键!

然后就是把所有得到的数据汇合起来了一起插入后提

交,

插入时间降低到了

90

秒,

整个建立索引的过程需要两分半钟左右。

效果已经能忍受了。

继续研究发现了

profile

这个神器,

用来分析代码性能,

发现最多的事件发生在

acquire

上面,

线程获得锁,这说明多线程作用发挥了,然后第二站时间的竟然是

split

操作,我们不是将

文件,父目录作为一个列表的数据结构嘛,要获得整个文件的路径要

split

,原来如此!果断

滴更改数据结构,好好思考了一下是一个字典,父目录:子文件(可以是文件或者目录),

这样就可以大大去除重复数据。

果然空间复杂度降低了很多,

效果也不错了。

再后来就是觉

得这个虽然是多线程但实际上遍历和插入是串行的,

但是为了获得每个线程得到的结果,

独做了一个线程类,把结果存放在线程的属性中,最后要查数据非得等所有线程结束,

join

之后主线程才能拿到数据,

这是一个阻塞的过程没有办法,

最好的想法是一些线程遍历,

些线程插入数据,这必然涉及到线程间通信的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值