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