我有一個腳本獲取各種ips的GeoIP位置,這是每天運行的,我預計會有大約50,000 ips的數據查找。Threaded wget - 最小化資源
我有一個GeoIP系統建立 - 我只是想消除每個報告運行wget 50,000次。
我在想的是,必須有一些方法讓wget打開與url的連接 - 然後傳遞ips,這樣就不必重新建立連接。
任何幫助將不勝感激。
我有一個腳本獲取各種ips的GeoIP位置,這是每天運行的,我預計會有大約50,000 ips的數據查找。Threaded wget - 最小化資源
我有一個GeoIP系統建立 - 我只是想消除每個報告運行wget 50,000次。
我在想的是,必須有一些方法讓wget打開與url的連接 - 然後傳遞ips,這樣就不必重新建立連接。
任何幫助將不勝感激。
如果你給wget
多個地址同時,隨着連續的地址屬於同一HTTP/1.1(Connection: keep-alive
)支持服務器,wget
將重新使用已建立的連接。
如果有太多的地址列表在命令行中,你可以把它們寫到一個文件,並使用-i
/--input-file=
選項(和,每UNIX傳統,-i-
/--input-file=-
讀取標準輸入)。
但是,沒有辦法保存跨越不同wget
調用的連接。
您也可以編寫一個線程化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"
呃,一次只有5個連接,但是你建立了總共50,000個連接。 – ephemient 2009-09-15 20:31:10
你也可以寫一個小程序(Java或C或其他)發送文件的列表作爲POST請求,服務器返回一個關於他們數據的對象。不應該太慢。
不知道你可以「接受」答案。我認爲這只是複選框? – Greg 2009-11-19 20:55:22