用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 = ...