2009-09-15 69 views
1

我有一個腳本獲取各種ips的GeoIP位置,這是每天運行的,我預計會有大約50,000 ips的數據查找。Threaded wget - 最小化資源

我有一個GeoIP系統建立 - 我只是想消除每個報告運行wget 50,000次。

我在想的是,必須有一些方法讓wget打開與url的連接 - 然後傳遞ips,這樣就不必重新建立連接。

任何幫助將不勝感激。

+0

不知道你可以「接受」答案。我認爲這只是複選框? – Greg 2009-11-19 20:55:22

回答

2

如果你給wget多個地址同時,隨着連續的地址屬於同一HTTP/1.1(Connection: keep-alive)支持服務器,wget將重新使用已建立的連接。

如果有太多的地址列表在命令行中,你可以把它們寫到一個文件,並使用-i/--input-file=選項(和,每UNIX傳統,-i-/--input-file=-讀取標準輸入)。

但是,沒有辦法保存跨越不同wget調用的連接。

0

您也可以編寫一個線程化Ruby腳本來同時在多個輸入文件上運行wget以加快進程。所以,如果你有一個包含10,000個地址各5個文件,你可以使用這個腳本:

#!/usr/bin/ruby 

threads = [] 

for file in ARGV 
    threads << Thread.new(file) do |filename| 
    system("wget -i #{filename}") 
    end 
end 

threads.each { |thrd| thrd.join } 

每個線程將使用一個連接來下載所有地址在文件中。那麼下面的命令意味着只有5個連接到服務器才能下載所有的50,000個文件。

./fetch.rb "list1.txt" "list2.txt" "list3.txt" "list4.txt" "list5.txt" 
+0

呃,一次只有5個連接,但是你建立了總共50,000個連接。 – ephemient 2009-09-15 20:31:10

0

你也可以寫一個小程序(Java或C或其他)發送文件的列表作爲POST請求,服務器返回一個關於他們數據的對象。不應該太慢。