2017-02-10 64 views
0

我在App服務計劃上的Azure函數應用程序中有一個函數。Azure函數凍結(?)

我的功能是在python中。它包含一個循環,它使用tweepy模塊從twitter API中獲取數據,並將結果寫入本地臨時文件,然後將它們保存到Azure存儲(我爲此使用AppenedBlobService)中的文件。

問題

的問題是有時我的函數只是凍結(?)。它會提出請求,獲得結果,保存結果然後隨時凍結。它不停止,當我看着監視器窗格時,它仍在運行(三個藍色點)。停止它的唯一方法是我必須重新啓動一個實例(過了一段時間,藍點變成橙色感嘆號)。它不顯示任何錯誤,也不會產生任何結果。它不會引發異常,最終block不會被執行,它感覺就像函數就在那裏,不執行新行,不停止,沒有任何東西。

什麼是完全令人困惑的是,這發生在執行過程中的不同步驟。有時會在調用API時發生(因此它看起來像該方法永遠不會返回),有時在存儲中檢查Blob存在(通過BlockBlobService完成),有時會在保存結果時發生。

假設

我的假設是,也有一些是錯誤的API。但是,當我在本地進行測試時,API沒有問題。我可以順利地完成大量連續請求,而Azure函數中的3-5個請求之後它會凍結。 (它也慢得多。) 所以另一種可能性是將文件保存到存儲時出錯了,但是有時候它會保存正確的結果。它會保存,然後循環回API調用並卡住,或者完成API調用並卡住,而不是保存或任何東西。

一切在當地環境中工作得很好所以我真的不知道如何繼續在這裏。我試圖通過在每一步之間打印來追蹤它,並且如上所述,我發現它掛起的位置,但它仍不能說明它爲什麼會掛起,因爲有時候這段代碼工作得很好。

任何有關問題可能出現的建議,或者我應該如何調試?謝謝!

回答

3

EDIT

這是一個問題,是由於通過應用服務/功能(2.7.8)和urllib3模塊使用蟒的版本,請參閱here。在web應用程序更新python版本之前,應用程序崩潰的錯誤可以被忽略或記錄。

你可以把蟒蛇的定製版本功能:https://github.com/Azure/azure-webjobs-sdk-script/wiki/Using-a-custom-version-of-Python


有與API的併發問題這是可能的。儘可能嘗試將所有邏輯移至輸入/輸出綁定。此外,你可以嘗試限制併發。考慮使用存儲隊列觸發器並在您的host.json中將batchSize設置爲1(無併發)。

看着日誌,你的函數來自tweepy庫有一些錯誤。

Here是關於訪問日誌的文章,或者您可以直接看看<sitename>.scm.azurewebsites.net/debugConsoleLogFiles/Application/Functions。您還可以通過host.json更改記錄行爲。

+0

發生這種情況時,隊列中始終只有一個項目。如果你能看看我的功能,那會很棒。網站:http://data-analysis.azurewebsites.net/,函數名以_search結尾 – Mind

+0

我已經查看了LogFiles/Applicaton/Functions中的日誌,並且它沒有任何比函數入口(僅停止在某些步驟打印任何東西)。在Kudu中,這些調用日誌與「監視器」窗格中顯示的相同。當我的函數凍結時,狀態是「永不完成」,因此除了綁定參數值和上下文之外沒有任何信息。可以指示我到哪裏我可以找到那些tweepy錯誤日誌? – Mind