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,大家都会是好样的。
Posted in 默认分类 | 6 Comments »
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 = ...
Posted in Python | No Comments »
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 ...
Posted in MySQL | 4 Comments »