看板 java 關於我們 聯絡資訊
之前需要爬一些網站的評論而想了一個簡單的多執行緒爬蟲 但是覺得方法不漂亮,想問問其他更好的想法 需求: (由於效率問題,需要 multithreading) 將許多網站連結(存在一個 List 裡面)裡面的評論全部爬下來 每個網站存成一個檔案,例如:txt 評論中會有連結連到其他文章,連文章一併爬下來 但是需要存到這個網站的檔案 ex: A 網站爬下來的資料存成 A.txt 裡面有評論連到 B 文章,需將 B 文章存進 A.txt 的相對位置 (就是那個評論那裏) 我之前的想法: 將 List 裡面的網站做 Multithreading 用一個暫時的 List 存爬下來的資料 碰到連結在 List 裡面做記錄,並把連結存到另一個 List 爬完這個網站之後將存連結的 List 做 multithreading 爬回來的文章寫回存資料的暫時 List 全部連結爬完之後將這個暫時 List 寫到 txt 問題: 1. 假如正在爬的幾個網站評論很多,記憶體用量可觀,而且 Threads 數量會很多 較難估計 CPU 使用 2. 每個網站產生完 threads 用過即丟,感覺很浪費,想重複利用 對於上面問題想請教更好的做法 感謝各位大大 -- 這是個最好的時代,也是個最壞的時代,是最光明的時代,也是最黑暗的時代 龍臥虎今懦夫,裡罪容化成無 情冷暖難回首,留多少傷心事 一沙一世界,一花一天堂,掌中盈無限,剎那即永恆。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 47.149.227.123 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1522399948.A.3EA.html
Chienhua: 用ThreadPool重新利用並控管總Thread量 03/31 11:55
pupuliao: 我們公司就在做這個不過我沒接觸XD 03/31 12:29
pupuliao: 你把爬蟲數量 跟 任務(網頁連結)數量分開 03/31 12:30
pupuliao: 所有爬蟲都統一去任務池中取任務,找到新任務也丟進去 03/31 12:31
pupuliao: 這是我想到的方法 可以控制CPU 用量 03/31 12:31
v9290026: unblockingQueue 04/01 12:30
只有找到 BlockingQueue ※ 編輯: obelisk0114 (47.149.227.123), 04/01/2018 14:39:34
zephyrhymn: 很多系統都是用pooling去管理使用總量 04/02 10:26
zephyrhymn: 一直new thread對效能和時間也是浪費 04/02 10:26
ssccg: 一定要用thread pool,要不要控制總量(thread數上限)是一回 04/02 10:36
ssccg: 事,但另一個重點是重複利用不要一直new新的 04/02 10:36
ssccg: 至於記憶體不夠用那當然就只能不要存記憶體,用暫存檔最後 04/02 10:53
ssccg: 再組合也可以 04/02 10:53