四行代码搞定Python线程池

一、什么是线程池

系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互。在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池。

线程池在系统启动时即创建大量空闲的线程,程序只要将一个函数提交给线程池,线程池就会启动一个空闲的线程来执行它。当该函数执行结束后,该线程并不会死亡,而是再次返回到线程池中变成空闲状态,等待执行下一个函数。

此外,使用线程池可以有效地控制系统中并发线程的数量。当系统中包含有大量的并发线程时,会导致系统性能急剧下降,甚至导致 Python 解释器崩溃,而线程池的最大线程数参数可以控制系统中并发线程的数量不超过此数。

二、如何创建线程池

python里面创建线程池很简单,只需要简单几行代码即可

    #实例化对象
    pool=Pool(num)
    #开启线程池,get_down为函数名且不加‘()’,list为一个可迭代对象
    pool.map(get_down,list)
    #关闭
    pool.close()
    pool.join()

三、单线程与线程池执行效率对比
1.单线程实例

#!/usr/bin/python
#  # Created by 老刘 on 2020/5/11
from multiprocessing.dummy import Pool
import time
def get_down(list):
    print("正在下载",list)
    time.sleep(2)
    print('下载完毕!')
if __name__ == "__main__":
    #单线程
    s = time.time()
    list=[1,2,3,4]
    for list in list:
        get_down(list)
    e=time.time()
    print("共耗时:",e-s)
        ******************************
    output:共耗时: 8.001622200012207
     ******************************
    ```

2.多线程实例

```python
from multiprocessing.dummy import Pool
import time
def get_down(list):
    print("正在下载",list)
    time.sleep(2)
    print('下载完毕!')
if __name__ == "__main__":
    start = time.time()
    list=[1,2,3,4]
    #实例化线程池
    pool=Pool(4)
    #开启线程池,get_down函数,list为可迭代对象
    pool.map(get_down,list)
    pool.close()
    pool.join()
    end=time.time()
    print("共耗时:",end-start)
    ******************************
    output:共耗时: 2.024726152420044
     ******************************

由两个实例不难看出,单线程耗时: 8.001622200012207秒,而线程池只需2.024726152420044秒,多线程明显可以提高执行效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值