2012-02-08 22 views
1

我正在創建一個爬蟲程序 - 一個java web應用程序,用戶可以在其中定義爬網作業,從中提取和存儲特定網站的信息。在java中使用循環結構並行處理

作爲這項工作的一部分,有一個'循環'結構......它有一個列表部分,它最初被評估(通常代表一個值列表)......之後是循環體,它對列表中的每個項目執行一次(從前面提到的列表部分)。

請注意,在另一個循環結構中可以有一個循環結構,依此類推。

問題是,有時候一個列表可能包含數百萬行數據 - 並且要爲此列表中的每一行執行正文。主體有一個起始索引值,索引的上限,並增加1。

我想要做的是,對於單級循環,最初計算列表值並將其存儲在數據庫中。之後,不是一次執行正文,而是將其分割爲不同的部分,以便並行處理列表的不同部分。

但是,如何分解n級循環的作業? (一個循環等在IE中一個循環。)

有沒有做這樣的處理...任何教程的一些推薦的方式或指導,你可以指出我的,將是對我很大的幫助。

回答

-1

假設你創建3個線程:T1,T2,T3。和以下爲循環結構,用於eaxmple

for(int i=0; i<100; i++) 
{ 
    for(int j=0; j<100; j++) 
    { 
     for(int k=0; k<100; k++) 
     { 
      // do some processing. 
     } 
    } 
} 

修改增量一部分i += no. of threads。在這種情況下,它將是i += 3

因此,i,j,k的初始值將隨着每個線程而變化。

對於T1:i = 0;

對於T2:i = 1;

對於T3:i = 2;

與之相似的循環限制可以被設置。

1

我建議包裝爲列表的1種元素的處理邏輯到可運行或調用,和然後將它們傳遞到一個Executor用於執行。這將在不同的工作線程中並行運行任務。當然,這取決於你的機器有多少核心,這將是多麼「平行」。 如果列表中的每個元素可以被處理完全獨立的所有其他的,比這將是要走的路,而不是我自己亂搞與線程和將列表到子列表等

0

根據你的描述對我來說, ,我知道你正在獲取xyz網站的源代碼並從中提取數據。

您可以使用XPath和RegularExpression來完成這種任務。使用JSOUP,它可以幫助你很多。

就並行化而言,您可以使用.select,getElementbyId,getElementByClassJSOUP(這是一個開源)。不是簡單地把

for(i=0 ;i< length;i++) 
{ 

    i am fetching i; 
    i am fetching i+1; 
    int temp=i+1; 
    if(temp>=length) 
    { 
     break; 
    } 
} 

希望這有助於:http://jsoup.org