Резьбовой wget - минимизация ресурсов - PullRequest
1 голос
/ 15 сентября 2009

У меня есть скрипт, который получает GeoIP-местоположения различных ips, он запускается ежедневно, и я собираюсь ожидать около 50 000 ips для просмотра.

У меня настроена система GeoIP - я просто хотел бы избежать необходимости запускать wget 50 000 раз за отчет.

Я думал о том, что должен быть какой-то способ, чтобы wget открывал соединение с URL-адресом - затем передавал ips, таким образом, не нужно восстанавливать соединение.

Любая помощь будет высоко ценится.

Ответы [ 3 ]

2 голосов
/ 15 сентября 2009

Если вы дадите wget несколько адресов одновременно, причем последовательные адреса принадлежат одному и тому же серверу, поддерживающему HTTP / 1.1 (Connection: keep-alive), wget будет повторно использовать уже установленное соединение.

Если в командной строке слишком много адресов для перечисления, вы можете записать их в файл и использовать параметр -i / --input-file= (и, согласно традиции UNIX, -i- / --input-file=- читает стандарт вход).

Однако нет способа сохранить соединение между различными вызовами wget.

0 голосов
/ 28 июня 2010

Вы также можете написать небольшую программу (на Java, C или любой другой), которая отправляет список файлов в виде запроса POST, а сервер возвращает объект с данными о них. Не должно быть слишком медленным.

0 голосов
/ 15 сентября 2009

Вы также можете написать многопоточный Ruby-скрипт для запуска wget одновременно на нескольких входных файлах, чтобы ускорить процесс. Поэтому, если у вас есть 5 файлов, содержащих по 10 000 адресов каждый, вы можете использовать этот скрипт:

#!/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"
...