20. 线程池与进程池

目录

前言

概念

实现

线程池

进程池

运行效果

总结


前言

我们认识了进程、线程,也了解了多进程和多线程对于执行效率的好处,那么我们该怎么将它很好的运用于实战呢?比如我们要创建一百个线程,总不能用t0=Thread一直到t99=Thread吧,这样效率是极低的。所以我们引入一个新概念:线程池与进程池。


概念

线程池: 一次性开辟一些线程,我们用户直接给线程池提交任务,线程任务的调度交给线程池来完成。

进程池: 一次性开辟一些进程,我们用户直接给进程池提交任务,进程任务的调度交给进程池来完成。


实现

线程池

from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor


def fn(name):
    for i in range(1000):
        print(name, i)


if __name__ == '__main__':
    # 创建线程池
    with ThreadPoolExecutor(50) as t:
        for i in range(100):
            t.submit(fn, name=f"线程{i}")
    # 等待线程池中的任务全部执行完毕. 才继续执行
    print("123")

导包,可以看到导入了两个Executor,它们分别是线程池执行器和进程池执行器,用来调度任务。

我们通过submit提交线程,提交到有50个线程容量的线程池,每次循环提交一个输出1000个数字的线程。等待线程池所有任务结束后再打印主函数后面的“123”.

进程池

进程池很简单,只需要把上述代码中线程池执行器改为进程池执行器API即可。

from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor


def fn(name):
    for i in range(1000):
        print(name, i)


if __name__ == '__main__':
    # 创建线程池
    with ProcessPoolExecutor(50) as t:
        for i in range(100):
            t.submit(fn, name=f"进程{i}")
    # 等待线程池中的任务全部执行完毕. 才继续执行(守护)
    print("123")

运行效果

 


总结

我们本节学习了线程池与进程池的用法,下一节我们将通过实战练习线程池的用法。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vec_Kun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值