繁体   English   中英

Azure function 不并行运行

[英]Azure function not running parallel

我在 python 中创建了一个 azure function。我通过 C# 调用它,预计同时发出大约 1000 个请求。 对于这个 function,我需要的是并行处理这些请求,而不是一个接一个地处理,但我无法做到这一点。

这是我并行发送 10 个请求的测试代码。

static void Main(string[] args)
    {
        List<string> symbols = new List<string> { "MSFT", "AAPL", "NFLX", "JNJ", "INTC", "GOOG", "AMZN", "FB", "TSLA", "TSM" };           
        List<string> results = new List<string>();
        List<string> urls = new List<string>();
        Parallel.ForEach(symbols, (symbol) =>
        {
            Trace.WriteLine("Getting - " + symbol);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("MY FUNCTION URL");
            request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            using (Stream stream = response.GetResponseStream())
            using (StreamReader reader = new StreamReader(stream))
            {
                Trace.WriteLine(reader.ReadToEnd());
            }
            Trace.WriteLine("Finished - " + symbol);
        });
        Console.ReadKey();

    }

我可以看到请求是一起发送的。 但处理是一个接一个。 这是我的 host.json 文件:

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[2.*, 3.0.0)"
  },
  "extensions": {
    "queues": {
      "batchSize": 1
    },
    "http": {
    "routePrefix": "api",
    "maxOutstandingRequests": 200,
    "maxConcurrentRequests": 1
    }
 

} }

据我所知,将“maxConcurrentRequests”设置为 1 会强制 function 应用程序横向扩展并创建多个实例。 我曾尝试将此值设置为 10 和 100,但它什么也没做。

我还尝试将以下配置值添加到 function 应用程序:

FUNCTIONS_WORKER_PROCESS_COUNT = 10。

PYTHON_THREADPOOL_THREAD_COUNT = 32。

那也没有任何区别。

我可以在 azure 分析中看到函数是根据它们的时间戳一个接一个地处理的。 而且累计时间是 ~ 10 * 单次运行。

我很确定这是一个配置问题,我错过了什么?

谢谢

阿米特

看看这个文档

HTTP 并行执行的函数的最大数量。 此值允许您控制并发性,这有助于管理资源利用率。 例如,您可能有一个 HTTP function 使用大量系统资源(内存/cpu/套接字),因此当并发过高时会导致问题。 或者您可能有一个向第三方服务发出出站请求的 function,并且这些调用需要进行速率限制。 在这些情况下,在此处应用节流阀会有所帮助。 *消费计划的默认值为 100。专用计划的默认值为无界 (-1)。

将它设置为 1,基本上是告诉它不要并行处理请求。 如果将其设置为 100,它将尝试一次处理 100 个。 如果 memory 或 CPU 需要更多并且队列中还有更多请求,功能将开始自动扩展(假设您有消费计划)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM