You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python开发的Azure Function无法并行处理并发HTTP请求问题咨询

问题排查与修复步骤

  • 首先修正客户端并发限制
    你使用的.NET Framework中HttpWebRequest默认有全局并发连接数限制,默认值仅为2,哪怕你用Parallel.ForEach发起并行请求,客户端本身就会把请求卡住串行发送,先在C#代码的Main方法最开头添加以下配置,排除客户端侧的并发限制问题:
ServicePointManager.DefaultConnectionLimit = 200;
  • 修正host.json的错误配置
  1. 你之前对maxConcurrentRequests参数的理解错误:这个参数限制的是单个实例上同时处理的HTTP请求最大数量,你设为1的情况下,单实例同一时间只能处理1个请求,10个测试请求流量太小,不会触发函数应用横向扩容,自然就串行处理了。
  2. 你贴的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": 100,
      "dynamicConcurrencyEnabled": true
    }
  }
}

把maxConcurrentRequests调整到你期望的单实例并发值,同时开启动态并发配置即可。

  • 确认Python函数代码的并发兼容性
    如果你的Python函数用的是同步写法(普通def定义),要确保代码中没有全局锁、共享资源阻塞等逻辑,避免多线程处理时被阻塞。如果是IO密集型的业务逻辑,建议改成async异步写法,能大幅提升并发处理效率。

  • 排查扩容触发逻辑
    Azure Functions消费计划的横向扩容不是即时触发的,需要有持续的请求积压才会启动新实例,10个请求的测试流量不足以触发多实例扩容,如果你需要验证多实例并行处理的效果,可以把测试请求量提升到100以上并持续发送一段时间,观察是否有新实例启动、并行处理请求。

  • 你之前设置的FUNCTIONS_WORKER_PROCESS_COUNT = 10和PYTHON_THREADPOOL_THREAD_COUNT = 32是生效的,配合调整后的maxConcurrentRequests参数就能在单实例上实现多请求并行处理。

内容的提问来源于stack exchange,提问作者Amit Raz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:06:02