[英]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.