WGET - 同时连接很慢
WGET - Simultaneous connections are SLOW
我使用以下命令将 URL 列表中的浏览器响应附加到相应的输出文件中:
wget -i /Applications/MAMP/htdocs/data/urls.txt -O - \
>> /Applications/MAMP/htdocs/data/export.txt
这工作正常,完成后它说:
Total wall clock time: 1h 49m 32s
Downloaded: 9999 files, 3.5M in 0.3s (28.5 MB/s)
为了加快速度,我使用了:
cat /Applications/MAMP/htdocs/data/urls.txt | \
tr -d '\r' | \
xargs -P 10 $(which wget) -i - -O - \
>> /Applications/MAMP/htdocs/data/export.txt
打开并发连接使其速度更快:
Total wall clock time: 1h 40m 10s
Downloaded: 3943 files, 8.5M in 0.3s (28.5 MB/s)
如您所见,它以某种方式省略了一半以上的文件并占用了大约。同时完成。我猜不出为什么。我想在这里做的是使用 xargs
一次下载 10 个文件(并行处理),并在 ‘STDOUT’
完成后跳转到下一个 URL。我是不是遗漏了什么或者可以用其他方式完成吗?
另一方面,有人可以告诉我可以设置的连接限制是多少吗?知道我的处理器可以处理多少个连接而不会降低我的系统太多速度甚至避免某种类型的 SYSTEM FAILURE.
真的很有帮助
我的API限速如下:
每分钟请求数100
单个请求中的映射作业数100
每分钟映射作业总数10,000
您是否尝试过 GNU Parallel?它将是这样的:
parallel -a /Applications/MAMP/htdocs/data/urls.txt wget -O - > result.txt
您可以使用它来查看它将执行的操作,而无需实际执行任何操作:
parallel --dry-run ...
要查看进度,请执行以下任一操作:
parallel --progress ...
parallel --bar ...
由于您的输入文件似乎有点乱,您可以像这样删除回车符 returns:
tr -d '\r' < /Applications/MAMP/htdocs/data/urls.txt | parallel wget {} -O - > result.txt
几件事:
- 我认为您不需要
tr
,除非您的输入文件有些奇怪。 xargs
预计每行一项。
man xargs
建议您“将 -n
选项与 -P
一起使用;否则
很可能只有一位执行官会完成。”
- 您正在使用
wget -i -
告诉 wget
从标准输入读取 URL。但是 xargs
会将 URL 作为参数提供给 wget
.
- 要调试,请将
echo
替换为 wget
并检查它是如何批处理参数的
所以这应该有效:
cat urls.txt | \
xargs --max-procs=10 --max-args=100 wget --output-document=-
(我更喜欢长参数 - --max-procs
是 -P
。--max-args
是 -n
)
请参阅 wget download with multiple simultaneous connections 了解执行相同操作的替代方法,包括 GNU parallel
和一些专用的多线程 HTTP 客户端。
但是,在大多数情况下,我不认为并行化会显着提高您的下载率。
在典型的用例中,瓶颈很可能是您与服务器的网络 link。在单线程下载过程中,您可能希望使该路径中最慢的 link 饱和。使用两个线程可能会获得非常小的收益,因为一个线程可以在另一个线程发送请求时进行下载。但这将是一个边际收益。
因此,只有当您从多个服务器获取数据时,这种方法才可能是值得的,并且到某些服务器的路由中最慢的 link 不在客户端。
我使用以下命令将 URL 列表中的浏览器响应附加到相应的输出文件中:
wget -i /Applications/MAMP/htdocs/data/urls.txt -O - \
>> /Applications/MAMP/htdocs/data/export.txt
这工作正常,完成后它说:
Total wall clock time: 1h 49m 32s
Downloaded: 9999 files, 3.5M in 0.3s (28.5 MB/s)
为了加快速度,我使用了:
cat /Applications/MAMP/htdocs/data/urls.txt | \
tr -d '\r' | \
xargs -P 10 $(which wget) -i - -O - \
>> /Applications/MAMP/htdocs/data/export.txt
打开并发连接使其速度更快:
Total wall clock time: 1h 40m 10s
Downloaded: 3943 files, 8.5M in 0.3s (28.5 MB/s)
如您所见,它以某种方式省略了一半以上的文件并占用了大约。同时完成。我猜不出为什么。我想在这里做的是使用 xargs
一次下载 10 个文件(并行处理),并在 ‘STDOUT’
完成后跳转到下一个 URL。我是不是遗漏了什么或者可以用其他方式完成吗?
另一方面,有人可以告诉我可以设置的连接限制是多少吗?知道我的处理器可以处理多少个连接而不会降低我的系统太多速度甚至避免某种类型的 SYSTEM FAILURE.
真的很有帮助我的API限速如下:
每分钟请求数100
单个请求中的映射作业数100
每分钟映射作业总数10,000
您是否尝试过 GNU Parallel?它将是这样的:
parallel -a /Applications/MAMP/htdocs/data/urls.txt wget -O - > result.txt
您可以使用它来查看它将执行的操作,而无需实际执行任何操作:
parallel --dry-run ...
要查看进度,请执行以下任一操作:
parallel --progress ...
parallel --bar ...
由于您的输入文件似乎有点乱,您可以像这样删除回车符 returns:
tr -d '\r' < /Applications/MAMP/htdocs/data/urls.txt | parallel wget {} -O - > result.txt
几件事:
- 我认为您不需要
tr
,除非您的输入文件有些奇怪。xargs
预计每行一项。 man xargs
建议您“将-n
选项与-P
一起使用;否则 很可能只有一位执行官会完成。”- 您正在使用
wget -i -
告诉wget
从标准输入读取 URL。但是xargs
会将 URL 作为参数提供给wget
. - 要调试,请将
echo
替换为wget
并检查它是如何批处理参数的
所以这应该有效:
cat urls.txt | \
xargs --max-procs=10 --max-args=100 wget --output-document=-
(我更喜欢长参数 - --max-procs
是 -P
。--max-args
是 -n
)
请参阅 wget download with multiple simultaneous connections 了解执行相同操作的替代方法,包括 GNU parallel
和一些专用的多线程 HTTP 客户端。
但是,在大多数情况下,我不认为并行化会显着提高您的下载率。
在典型的用例中,瓶颈很可能是您与服务器的网络 link。在单线程下载过程中,您可能希望使该路径中最慢的 link 饱和。使用两个线程可能会获得非常小的收益,因为一个线程可以在另一个线程发送请求时进行下载。但这将是一个边际收益。
因此,只有当您从多个服务器获取数据时,这种方法才可能是值得的,并且到某些服务器的路由中最慢的 link 不在客户端。