Size: 4550
Comment:
|
← Revision 5 as of 2009-12-25 07:19:10 ⇥
Size: 4485
Comment: converted to 1.6 markup
|
Deletions are marked like this. | Additions are marked like this. |
Line 4: | Line 4: |
[[TableOfContents]] | <<TableOfContents>> |
Line 6: | Line 6: |
[[Include(ZPyUGnav)]] | <<Include(ZPyUGnav)>> |
Line 21: | Line 21: |
== 缘起 == | == 缘起 == |
Line 54: | Line 55: |
== 小结:== | == 小结: == |
Line 73: | Line 74: |
创建 by -- ZoomQuiet [[[DateTime(2008-12-11T14:21:44Z)]]] ||<^>[[PageComment2]]||<^>[:/PageCommentData:PageCommentData]''|| |
创建 by -- ZoomQuiet [<<DateTime(2008-12-11T14:21:44Z)>>] |
关于jpype/lucene 的痛苦
ghostwwl <[email protected]> reply-to [email protected] to python-cn`CPyUG`华蟒用户组 <[email protected]> date Thu, Dec 11, 2008 at 21:56 subject [CPyUG:73571] 关于jpype\lucene\paoding
缘起
这个星期已经折腾这个好几天了
- 需求
- 在python使用lucene对爬虫的爬回来的数据包做索引 提供给搜索引擎组 引擎组使用的java 要控制爬虫回访数据的:
- 增量索引
- 索引的修改 添加 和删除
解决办法一
- 公司开发环境win 如果使用linux就远程登陆 有的是centos 最开始 我的第一个版本使用的Gcj的 在centos下
良好 然后使用 jcc发现也没什么问题 安装过程中 出现最多的就是 修改makefile文件 如果你写过gcc 对make的语法 不是很陌 生 安装上应该不会有问题 多线程PyLucene.PythonThread 这个你就当做python的threading用 一般不会有问 题 为了对索引是pylucene的使用的内存控制 和减少磁盘的压力 我多线程的时候 多个线程公用一个基于内存的IndexWriter然后到 了一定量同步到 基于文件的writer
- 这个方法很有效
需要说明的是 lucene的api上说IndexWriter是线程安全的 确实是线程安全的
- 但是 发现 如果自己在python里再加一个锁 保证同一时刻只有一个线程写 比不加锁效率 会高很多
- 不知道java的锁 是咋搞的 这个是我我对单字段 磁盘文件索引 极限速度可以到 100万数据 5分钟左右 使用标准分词
- 结果需求又来了
- 搜索组要求使用庖丁解牛分词 然后我就很努力的 想把 庖丁的源代码包 和lucene的源代码包放在一起 用pylucene-src的 通过修改makefile 来达到安装好pylucene后 就有了paoding 我可耻尝试了 gcj 和jcc两个版本
- 因为对java我是小白 最后还是可耻的失败了 1个多星期 天天堆着makefile和java 痛苦可想而知
解决办法二:
- 本周二的时候 在偶们组长惊喜的发现jpype然后说这个可以直接使用jar包 他说不要看网上 资料很少 大部分骂他不稳定 他说他觉得应该是稳定的 这个更实用的人有关系 不稳定肯定是自己的使用有问题 不要怀疑 这个东西的稳定性 可耻的 鄙视自己一把 我一直就怀疑 后来证明 这个是很稳定的 确实跟代码 和使用有关系
- 然后让搜索组的 兄弟姐妹 弄来lucene和paoding的jar 昨天我不知道怎么同时使用2个jar 问了木头兄 今天 可耻的
发现 只要分好 跟多个jar 再次鄙视自己问这么低级的问题
- 到下午的时候 把以前使用pylucene的代码 使用jpype重构 嗯 终于可以索引了 效率 比直接用pylucene低
速度只有那个的1/2不到 当然我同样多线程 这个时候又碰到一个恶心的问题 java的虚拟机报出 内存问题 堆内存不够用了 然后问问了zq 哎。。。。
- 又是一个低级的问题 没办法 老大告我们 碰到问题的时候 去查资料 不如问别人来的快 省时间 要知道 我还正写代码在, 后
来 没办法google找到解决办法
- 庖丁使用一路下来 折磨不少 特别那个配置加载 和词库加载 感谢偶们搜索组的java同胞 帮助 没有他们 还用不是庖丁
小结:
- 网上说的所谓的jpype不稳定 这个是不对的 如果出现问题
- 第一看看自己的代码
- 第二 看你调用的java的代码
- 第三看jpype的手册
- 千万不要在调用jpype的时候在python里使用那个关闭jvm的那个函数 让python运行完自己关闭jvm 不然 。。。 我发现死在那里动不了 呵呵
依然存在的问题:
- 现在没有解决的问题就是 怎么在python使用jpype的时候 手动对java虚拟机里的资源 回收?!
- 都知道java的gc要到空闲的时候才资源回收 不然如果长时间跑 特别大量数据 交互 频繁创建对象 你会发现 java虚拟机的堆内存永远是不够用的 这个还没解决 有知道的pythoner告诉偶一声
反馈
创建 by -- ZoomQuiet [2008-12-11 14:21:44]