【问题标题】:Azure function & Blob Trigger times outAzure 函数和 Blob 触发器超时
【发布时间】:2021-03-26 23:34:31
【问题描述】:

我在理解 Function 应用程序的工作原理时遇到了一些麻烦 ..

我的环境如下:Python3.8,Blob Trigger,消耗计划

我正在创建一个应用程序,该应用程序在音频文件上传到容器时触发。此音频文件触发 Azure 功能并使用 Azure 认知服务运行“语音转文本”(因此我的功能正在等待该服务的答复)。我将“FUNCTIONS_WORKER_PROCESS_COUNT”设置为 5,以允许我的每个函数应用实例并行运行多个语音到文本分析。

所以我将 100 个 blob 上传到我的容器中以检查我的函数行为,这是我得到的:

函数应用被触发并启动多个服务器(5 个用于 100 个 blob),然后开始处理每个服务器 1 个 blob,直到我上传 blob 超过 30 分钟,然后我得到一个超时。

但我期待这种行为: 函数应用被触发并启动多个服务器。每台服务器并行处理 5 个 blob,并在 15 到 20 分钟内为我的所有 blob 提供答案!

所以我在这里没有得到两件事。 W

  • 为什么我的函数不是每台服务器处理 5 个 blob 而不是每台服务器 1 个 blob? (我在 5 处设置了“FUNCTIONS_WORKER_PROCESS_COUNT”)?
  • 而且我的 blob 似乎一出现在容器中就会被处理,而不是放入队列中。这种行为是造成超时的原因,因为它们等待了很长时间而不是被处理.. 为什么?

我希望我很清楚.. 感谢您的帮助!

编辑:我刚刚添加了 100 个 Blob,以查看功能应用程序的反应,并且我新上传的 Blob 在我开始上传的 Blob 之前得到处理。

【问题讨论】:

    标签: python azure function cloud


    【解决方案1】:

    1.对于您的第一个问题:

    据我了解,Python is a single-threaded runtime

    因为 Python 是单线程运行时,所以它是一个宿主实例 Python 一次只能处理一个函数调用。为了 处理大量 I/O 事件和/或 I/O 的应用程序 绑定,你可以通过运行函数显着提高性能 异步。

    FUNCTIONS_WORKER_PROCESS_COUNT 让您在每个主机上运行 5 个 blob 触发函数是正确的,但如果您使用相同的资源,它会一个一个地运行,这意味着即使您可以同时运行 5 个进程,如果第一个进程正在运行您的函数,则第二个进程(运行相同的函数)将等待;如果您的第一个进程正在等待数据进来,则第二个进程将首先运行。

    这是一篇文章how FUNCTIONS_WORKER_PROCESS_COUNT works

    并且您可以检查您正在使用多少个工作实例。如果你有 100 个 blob 来触发你的函数并且每个工作实例有 5 个工作进程集,它应该启动 20 个实例来使用请求。 (如有错误欢迎指正。)


    2。对于第二个问题:

    The Blob storage trigger starts a function when a new or updated blob is detected.

    这就是blob触发函数的工作原理。

    【讨论】:

      猜你喜欢
      • 2022-01-08
      • 1970-01-01
      • 2019-01-11
      • 2018-08-29
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      相关资源
      最近更新 更多