首先须要了解的是threadpool 的用途,他更适合于用到一些大量的短任务合集,而非一些时间长的任务,换句话说,适合大量的CPU密集型短任务,那些消耗时间较长的IO密集型长任务适合用协程去解决。html
目前,python 标准库(特指python2.X)中的threadpool模块是在 multiprocessing.pool.threadpool,或者multiprocessing.dummy.ThreadPool(dummy模块是针对threading 多线程的进一步封装)。该模块有个缺点就是在全部线程执行完以前没法强制退出。实现原理大同小异:实例化pool的时候会建立指定数目的线程,把task 传给一个task-queue,线程会读取task-queue 的task,没有就阻塞,读取到后就执行,并将结果交给一个result-queue。python
除了标准库中的threadpool,还有一些使用比较多的threadpool,如下展开。git
pip 中的 ThreadPool
安装简单:pip install threadpool
使用以下:github
1 |
pool = ThreadPool(poolsize) # 定义线程池,指定线程数量 |
原理相似,源码解读能够参考python——有一种线程池叫作本身写的线程池 ,该博客还给出了对其的一些优化。多线程
本身定制 threadpool
根据须要的功能定制适合本身的threadpool 也是一种常见的手段,经常使用的功能好比:是否须要返回线程执行后的返回值,线程执行完以后销毁仍是阻塞等等。如下为本身常常用的的一个比较简洁的threadpool,感谢@kaito-kidd提供,源码:函数
1 |
# coding: utf8
|
阅读原文post