Archive for December, 2008

正走在路上

Wednesday, December 31st, 2008

去年的这个时候我琢磨是不是要离职,事业单位,福利待遇都很好,离开了什么都要重新再来,思前想后,还是决定出来看看,毕竟在学校呆了18年了(小学5年+初中3年+高中3年+大学4年+学校出版社3年),在这个不大不小的年纪做这个决定是必要的,估计再过几年就不会动了,也动不了了。2008年2月27日,给出版社的同事写了一封致年轻人的信,然后3月份就到FH网去报到了,刚从学校出来的时候,可能那个经济环境还不错,拿到了些个offer,选择FH网是觉得是门户,公司大一些可能会正规一些,实际怎么样就不说了,一个项目下来,三个技术辞职,剩下的一个是测试,后来陆续在sina看到原来的同事来面试,想想出走还是明智的。6月份到sina报到,直至现在。 2008年成长最快的还是技术方面,PHP还算熟悉了,Javascript也凑合了,抽空做了做Python,已经离不开了,数据挖掘主要方向是推荐系统,也有些收获,过几天把netflix prize的分数晒晒。 与人交往方面还是没什么进步,基本上关系好的是我尊重的人和尊重我的人,所以你要成为我的好朋友,你需要有值得我尊重的东西,尤其是品质,或者尊重我,这样会友好很多。如果你不在二者之列,太对不起了,过去的一年我估计没少得罪你。 我出来之后有人问我出来感觉怎么样或者出来好不好,正好昨天看到一则小故事,人问佛:我不知道我现在的爱是真的还是假的,我该怎么办?佛说:有机会就去爱吧,不要管是劫还是缘,劫也是缘。所以有机会就试试吧,反正我的感觉很好。 2009年主要要做的事情:网络(socket)/桌面(gui)编程;一个精巧的PHP框架(雏形差不多了,和原生的PHP相比性能损耗大概在1.5ms左右);数据挖掘(推荐系统差不多了,试试其他的领域,有可能在XX预测的方向);多一些好朋友。 春天快要来了,因为人们都后知后觉,2009,大家都会是好样的。

用Python创建线程池

Tuesday, December 23rd, 2008

本博客所有原创文章采用知识共享署名-非商业性使用-相同方式共享,转载请保留链接http://chaoqun.17348.com/2008/12/python-thread-pool/ 最近在做一些数据挖掘方面的工作,需要对海量的数据进行处理,在目前的硬件环境下,多进程+多线程的方式对运算时间的减少大有裨益,我用的是Python语言,开发效率高,运算效率也不低。 Python里面成型的线程池可以看以下http://www.chrisarndt.de/projects/threadpool/,看了一下API介绍,应该写的比较完备了,我这里想介绍的是Python线程池实现的原理以及一个简明的线程池代码实例。 我这里是用Queue这个包来实现的,Queue翻译成中文就是队列,全局的,我们把任务放进队列中去,然后开N个线程,每个线程都去队列中取一个任务,执行完了之后告诉系统说我执行完了,然后接着去队列中取下一个任务,直至队列中所有任务取空,退出线程。 这就是一般的线程池实现的原理,下面看一个实际的代码: import time import threading import Queue class Worker(threading.Thread):     def __init__(self, name, queue):         threading.Thread.__init__(self)         self.queue = queue         self.start()     def run(self): # 著名的死循环,保证接着跑下一个任务         while True:             # 队列为空则退出线程             if self.queue.empty():                 break             # 获取一个项目             foo = self.queue.get()             # 延时1S模拟你要做的事情             time.sleep(1)             # 打印             print self.getName(),':', foo             # 告诉系统说任务完成             self.queue.task_done() # 队列 queue = ...

MySQL统计函数GROUP_CONCAT陷阱

Saturday, December 13th, 2008

本博客所有原创文章采用知识共享署名-非商业性使用-相同方式共享,转载请保留链接http://chaoqun.17348.com/2008/12/mysql-trap-of-group-concat/ 最近在用MySQL做一些数据的预处理,经常会用到group_concat函数,比如类似下面一条语句 mysql>select aid,group_concat(bid) from tbl group by aid limit 1; sql语句比较简单,按照aid分组,并且把相应的bid用逗号串起来。这样的句子大家可能都用过,也可能不会出问题,但是如果bid非常多的话,你就要小心了,比如下面的提示信息: Query OK, XXX rows affected, 1 warning (3 min 45.12 sec) 怎么会有警告呢,打出来看看: mysql> show warnings; +---------+------+-----------------------------------------+ | Level   | Code | Message                                 | +---------+------+-----------------------------------------+ | Warning | 1260 | 1 line(s) were cut by GROUP_CONCAT() | +---------+------+-----------------------------------------+ 居然被GROUP_CONCAT截断了我的结果,查了一下手册,原来GROUP_CONCAT有个最大长度的限制,超过最大长度就会被截断掉,你可以通过下面的语句获得: mysql> SELECT @@global.group_concat_max_len; +-------------------------------+ | @@global.group_concat_max_len | +-------------------------------+ |                      1024 | +-------------------------------+ 1024这就是一般MySQL系统默认的最大长度,如果你的bid串起来大于这个就会出问题,好在有解决的办法: 1.在MySQL配置文件中加上 group_concat_max_len ...