并发篇-python线程池-1

2019-07-18 10:59:50 浏览数 (3)

线程池的简单实现

主线程: 相当于生产者,只管向线程池提交任务。并不关心线程池是如何执行任务的。因此,并不关心是哪一个线程执行的这个任务。

线程池: 相当于消费者,负责接收任务,并将任务分配到一个空闲的线程中去执行。

>>>执行结果

注意:这两个几乎是一起完成的!

为什么要使用线程池?

对于任务数量不断增加的程序,每有一个任务就生成一个线程,最终会导致线程数量的失控,例如,整站爬虫,假设初始只有一个链接a,那么,这个时候只启动一个线程,运行之后,得到这个链接对应页面上的b,c,d,,,等等新的链接,作为新任务,这个时候,就要为这些新的链接生成新的线程,线程数量暴涨。

在之后的运行中,线程数量还会不停的增加,完全无法控制。所以,对于任务数量不断增加的程序,固定线程数量的线程池是必要的。

python内置线程池

# 直接使用内置的线程池

>>> pool = ThreadPool(2)

# 要求:在 join 前必须要 close,这样就不允许再提交任务了

>>> pool.close()

0 人点赞