gpt4 book ai didi

multithreading - WGET-同时连接速度很慢

转载 作者:行者123 更新时间:2023-12-03 13:17:01 24 4
gpt4 key购买 nike

我使用以下命令将浏览器的响应从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)

如您所见,它以某种方式忽略了一半以上的文件,大约花费了大约30%的时间。同时完成。我不知道为什么。我想在这里使用 xargs一次下载10个文件(并行处理),并在 ‘STDOUT’完成后跳转到下一个URL。我是否缺少某些东西,否则可以这样做吗?

另一方面,有人可以告诉我关于连接可以设置的限制吗?知道处理器可以处理多少个连接而不会减慢我的系统速度,甚至避免某种类型的 SYSTEM FAILURE ,这将真的有帮助。

我的 API速率限制如下:

每分钟请求数 100

单个请求中的映射作业数 100

每分钟的映射作业总数 10,000

最佳答案

一些东西:

  • 我认为您不需要tr,除非您的输入文件有些奇怪。 xargs希望每行有一项。
  • man xargs建议您“将-n选项与-P一起使用;否则
    机会是只有一名高管才能完成。”
  • 您正在使用wget -i -告诉wget从stdin中读取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客户端。

    但是,在大多数情况下,我预计并行化不会显着提高您的下载速度。

    在典型的用例中,瓶颈可能是您到服务器的网络链接。在单线程下载期间,您可能希望饱和该路由中最慢的链接。使用两个线程可能会获得很小的 yield ,因为一个线程可以下载而另一个线程正在发送请求。但这将是微不足道的 yield 。

    因此,仅当您从多台服务器中获取数据时,这种方法才有意义,并且到某些服务器的路由中最慢的链接不在客户端。

    关于multithreading - WGET-同时连接速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45217605/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com