簡體   English   中英

Azure function & Blob 觸發器超時

[英]Azure function & Blob Trigger times out

我很難理解 Function 應用程序是如何工作的。

我的環境如下:Python3.8, Blob Trigger, Cosumption Plan

我正在創建一個應用程序,該應用程序在音頻文件上傳到容器時觸發。 This audio file trigger an Azure function and run "Speech-To-Text" using Azure cognitive service (So my function is waiting for an answer from that service). 我將“FUNCTIONS_WORKER_PROCESS_COUNT”設置為 5,以允許我的每個 function 應用程序實例並行運行多個語音到文本分析。

所以我將 100 個 blob 上傳到我的容器中以檢查我的 function 行為,這是我得到的:

Function 應用程序被觸發並啟動多個服務器(5 個用於 100 個 blob),然后開始為每個服務器處理 1 個 blob,直到我上傳 blob 超過 30 分鍾,然后我得到一個超時。

但我期待這種行為: Function 應用程序被觸發並啟動多個服務器。 每台服務器並行處理 5 個 blob,並在 15 到 20 分鍾內為我的所有 blob 給出答案!

所以我在這里沒有得到兩件事。 W

  • 為什么我的函數不是每台服務器處理 5 個 blob 而不是每台服務器處理 1 個 blob? (我在 5 處設置了“FUNCTIONS_WORKER_PROCESS_COUNT”)?
  • 我的 blob 似乎一出現在容器中就被處理,而不是放入隊列中。 這種行為是造成超時的原因,因為它們等待了很長時間而不是被處理。為什么?

我希望我很清楚..謝謝你的幫助!

編輯:我剛剛添加了 100 個 Blob,以查看 function 應用程序如何反應,並且我剛上傳的 Blob 正在處理之前我一開始上傳的 Blob。

1.對於你的第一個問題:

據我了解, Python 是單線程運行時

由於 Python 是單線程運行時,因此 Python 的主機實例一次只能處理一個 function 調用。 對於處理大量 I/O 事件和/或受 I/O 限制的應用程序,您可以通過異步運行函數來顯着提高性能。

FUNCTIONS_WORKER_PROCESS_COUNT使您在每個主機上運行 5 個 blob 觸發函數是正確的,但是如果您使用相同的資源,它將一個一個運行,這意味着即使您可以同時運行 5 個進程,如果第一個進程是運行您的 function,第二個進程(運行相同的功能)將等待; 如果您的第一個進程正在等待數據進入,則第二個進程將首先運行。

這是一篇文章FUNCTIONS_WORKER_PROCESS_COUNT的工作原理

您可以檢查您正在使用多少個工作實例。 如果您有 100 個 blob 來觸發您的 function 和每個工作實例設置 5 個工作進程,它應該啟動 20 個實例來使用請求。 (如有錯誤歡迎指正。)


2.關於你的第二個問題:

當檢測到新的或更新的 Blob 時,Blob 存儲觸發器會啟動 function。

這就是 blob 觸發 function 的工作原理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM