首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Parallel.foreach()与WebRequest。429错误

Parallel.foreach()与WebRequest。429错误
EN

Stack Overflow用户
提问于 2017-06-21 13:59:08
回答 2查看 1.5K关注 0票数 1

我目前正在运行一个脚本,该脚本在一段较长的时间内访问api大约3000次。我正在使用parallel.foreach(),这样我就可以一次发送几个请求来加速这个过程。我在每个foreach迭代中创建两个请求,所以我应该不超过10个请求。我的问题是,我不断地收到来自服务器的429个错误,我与管理服务器的人交谈,他们说他们看到了大量的40+请求。以我目前对代码的理解,我甚至不相信这是可能的,有人能告诉我如果我在这里遗漏了什么吗?

代码语言:javascript
复制
    public static List<Requests> GetData(List<Requests> requests)
    {
        ParallelOptions para = new ParallelOptions();
        para.MaxDegreeOfParallelism = 5;

        Parallel.ForEach(requests, para, request =>
        {
            WeatherAPI.GetResponseForDay(request);
        });

        return requests;
    }

    public static Request GetResponseForDay(Request request)
    {
        var request = WebRequest.Create(request);
        request.Timeout = 3600000;
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader myStreamReader = new 
        StreamReader(response.GetResponseStream());
        string responseData = myStreamReader.ReadToEnd();
        response.Close();

        var request2 WebRequest.Create(requestthesecond);
        HttpWebResponse response2 = (HttpWebResponse)request2.GetResponse();
        StreamReader myStreamReader2 = new 
        StreamReader(response2.GetResponseStream());
        string responseData2 = myStreamReader2.ReadToEnd();
        response2.Close();

        DoStuffWithData(responseData, responseData2)

        return request;
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-21 16:49:27

正如智能信徒所指出的,将并行度设置为5并不会阻止您发送服务器端策略定义的太多请求。它所做的就是防止您耗尽在您这边进行这些请求所需的线程数。因此,您需要做的是与服务器所有者沟通,熟悉它们的限制,并更改代码,使其永远不满足限制。

所涉及的变量如下:

  1. 您将发送的并发请求数量(并行性)
  2. 一个请求所需的平均时间
  3. 服务器允许的每个单位时间的最大请求

因此,例如,如果您的平均请求时间是200 is,并且最大并行度为5,那么您可以期望平均每秒发送25个请求。如果每个请求需要500 10,那么您只需发送10条。

混合服务器允许数字进入,您将得到如何微调您的数字的想法。

票数 1
EN

Stack Overflow用户

发布于 2017-06-22 11:56:42

以上两个答案基本上都是正确的。我遇到的问题是,服务器管理器在以前没有请求的情况下,设置了100个请求/分钟的速率限制,并且没有通知我。当我达到100次请求/分钟的极限时,我几乎立即收到了429个错误,并开始以这个速度发送请求,同时也收到了429个错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44678270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档