知道创宇爬虫设计第一天:threadpool
题目要求自己实现线程池,研究了好几篇博客之后,大致提取出几个要点:
- 使用默认的
Thread()
创建线程时,通常都是直接绑定一个具体的func
但若使用线程池,初始化的线程数在有些时候可能会多于任务数
因此,在自定义MyThread()
时,采用先绑定整个任务队列,然后逐条取出任务func
执行的方式 - 使用
MyThreadPool
提前创建所需数目的线程,再分配给具体任务func
- 自定义
MyThread()
中需设置self.daemon = True
,否则完成所有任务后仍不会推出 Queue()
提供了两个非常好用的方法task_done()
一条任务完成时通知整个队列,空闲下来的线程就可以被分配新任务join()
在所有任务执行完成之前阻塞主线程
代码
|