|
Python因為有GIL鎖,多線程一直被詬病。在CPU密集型的任務(wù)場景中Python的多線程并不是很理想,而對于像網(wǎng)絡(luò)爬蟲這樣的IO密集型任務(wù)場景,Python的多線程可以在一定程度上提高任務(wù)的并行度。下面我們詳細(xì)說一下: 一、原理 解釋一下: master線程的run方法中,第一眼看它是個死循環(huán),實際上它的意思是:我們從response_queue中,拿不到任務(wù)響應(yīng)的時候,會拋出異常,退出循環(huán)體。拿到響應(yīng)以后,調(diào)用filter方法,filter的參數(shù)是ResponseItem對象,ResponseItem中包含已抓取URL,這個方法有兩個作用:第一個是保存已抓取鏈接,第二個是去掉待抓取鏈接中重復(fù)的鏈接。 <div '="">三、總結(jié)一下 簡單的說,主線程負(fù)責(zé)任務(wù)調(diào)度,從響應(yīng)隊列獲取任務(wù)執(zhí)行結(jié)果, 往任務(wù)隊列加入新的任務(wù),子線程負(fù)責(zé)抓取任務(wù)。從任務(wù)隊列獲取任務(wù),執(zhí)行完成后返回結(jié)果,存放到響應(yīng)隊列。 |
|
|