Существует ли параллель wget? Что-то как fping, но только для загрузки?

При анализе кода Вы отправили также задницу acpi_call приводит меня к заключение, что самые вероятные кандидаты должны быть:

echo '\_SB.PCI0.PEG0.PEGP._OFF' > /proc/acpi/call

выключить карту и

echo '\_SB.PCI0.PEG0.PEGP._ON' > /proc/acpi/call

снова включать его снова.

Необходимо быть в безопасности протестировать их, как README для acpi_call состояния:

ДОЛЖНО быть нормально тестировать все методы

И \_SB.PCI0.PEG0.PEGP._OFF один из методов, протестированных в их test_off.sh сценарий. В то же время это - единственное ..._OFF метод, появляющийся в Вашем коде ACPI.

Если бы они не работают, как Вы ожидали бы, Вы могли бы попробовать вместо этого \_SB.PCI0.PEG0.PEGP._PS3 для приостановки и \_SB.PCI0.PEG0.PEGP._PS0 для возобновления. В Вашем коде эти методы, кажется, звонят ..._OFF и .._ON с некоторыми дополнительными тестами и т.д. Их имена также предлагают отношение к переключению между питанием на/приостанавливать состояниях.

14
12.09.2017, 12:55
6 ответов

Использование параллели GNU,

$ parallel -j ${jobs} wget < urls.txt

или xargs от GNU Findutils,

$ xargs -n 1 -P ${jobs} wget < urls.txt

где ${jobs} максимальное количество wget Вы хотите позволить работать одновременно (установка -n кому: 1 получить тот wget вызов на строку в urls.txt). Без -j/-P, parallel выполнит столько же заданий за один раз сколько ядра процессора (который не обязательно имеет смысл для wget связанный сетью IO), и xargs будет работать по одному.

Одна хорошая функция это parallel имеет xargs сохраняет вывод одновременно рабочих заданий разделенным, но если Вы не заботитесь об этом, xargs более вероятно, будет предварительно установлен.

24
27.01.2020, 19:50
  • 1
    jobs зависит от многих факторов: задержка пути, пропускная способность пути, политики удаленного сервера, и т.д. –  dhchdhd 18.09.2017, 12:13
  • 1
    Этот ответ был бы улучшен с фактическим примером, который решает спрошенную проблему, вместо этого, это квалифицирует как ответ только для ссылки. meta.stackexchange.com/questions/225370 / требования … –  Jeff Schaller♦ 12.09.2017, 12:58

Можно реализовать то использование Python и pycurl библиотека. pycurl библиотека имеет "много" интерфейс, который реализует его собственный ровный цикл, который включает несколько одновременных соединений.

Однако интерфейс является довольно подобным C и поэтому немного громоздким по сравнению с другим, большим количеством "Pythonic", кодом.

Я записал обертку для него, которая создает более полный подобный браузеру клиент сверху его. Можно использовать это в качестве примера. Посмотрите pycopia. Модуль WWW.client. HTTPConnectionManager переносит много интерфейс.

2
27.01.2020, 19:50

Часть страницы справочника Параллели GNU содержит пример параллельного рекурсивного wget.

https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Breadth-first-parallel-web-crawler-mirrorer

HTML загружается дважды: Однажды для извлечения ссылок и однажды для загрузки на диск. Другое содержание только загружается однажды.

Если Вам не нужен ответ ephemient's рекурсивности, кажется очевидным.

1
27.01.2020, 19:50
  • 1
    Просто последнее к вашему сведению, что какая-либо параллель плюс wget "решение" оба по сути неэффективна, потому что это требует контента загрузки дважды, медленный из-за всей многофазной загрузки и также не хорошо к sysops, кого должен заплатить за всю Вашу трату пропускной способности, потому что Вы не использовали эффективное решение. –  dhchdhd 18.09.2017, 11:23

Жертвы Вашей параллельной загрузки не будут удивлены: они ожидают, что одно соединение для обслуживания каждого клиента, настраивая несколько соединений означает меньше клиентов в целом. (Т.е. это считают грубым поведением).

0
27.01.2020, 19:50
  • 1
    , Но он мог бы загружать файлы с различных серверов, таким образом, это не будет применяться. –  Renan 16.01.2013, 03:01
  • 2
    Помимо того, какой сказанный @vonbrand, Вы могли получить что-то как "Слишком много соединений" и не смочь загрузить все файлы. И это может быть немного медленнее (например, многократное использование одного HTTP-соединения по сравнению с созданием нескольких HTTP-соединений) –  golimar 06.02.2014, 17:10
  • 3
    Пока Вы сохраняете число нормальным, это не имеет большого значения. Например, в то время, когда Вы записали это, Firefox использовал 15 соединений на сервер если не с помощью постоянных соединений (они с тех пор переключились только на попытку постоянных соединений, которые ограничены 6 на сервер). Другие браузеры используют подобные числа. –  derobert 24.06.2015, 06:26

Это работает и не будет вызывать локальный или удаленный DoS при правильной настройке:

(bandwidth=5000 jobs=8; \
 parallel      \
   --round     \
   -P $jobs    \
   --nice +5   \
   --delay 2   \
   --pipepart  \
   --cat       \
   -a urls.txt \
     wget                                \
       --limit-rate=$((bandwidth/jobs))k \
       -w 1                              \
       -nv                               \
       -i {}                             \
)
2
27.01.2020, 19:50

Теги

Похожие вопросы