Azure函数冻结(?)

时间:2017-02-10 15:10:03

标签: python azure azure-functions

我在Azure服务计划的Azure Functions应用程序中有一个功能。

我的功能在python中。它包含一个循环,使用tweepy模块从twitter API中获取数据,并将结果写入本地临时文件,然后将其保存到Azure存储中的文件(我使用AppenedBlobService)。

问题

问题有时我的功能只是冻结(?)。它会提出请求,获得结果,保存结果,然后随时冻结。它不会停止,当我看到监视器窗格时,它仍在运行(三个蓝点)。阻止它的唯一方法是我必须重新启动一个实例(过了一会儿,蓝点变成橙色感叹号)。它没有显示任何错误,也没有产生任何结果。它没有异常,最后块没有被执行,感觉就像函数就在那里,没有执行新行,没有停止,没有。

令人困惑的是,这种情况发生在执行期间的不同步骤中。有时它会在调用API时发生(因此看起来该方法永远不会返回),有时在Storage中检查blob存在时(通过BlockBlobService完成),有时候在保存结果时。

假设

我的假设是API存在问题。但是,当我在本地测试时,API没有问题。我可以毫无问题地进行大量连续请求,而在Azure功能中3-5次请求后它会冻结。 (它也慢得多。) 所以另一种可能性是将文件保存到存储器出错了,但问题是,有时它会正确保存结果。它保存,然后循环回API调用并卡住,或者它完成API调用并卡住,而不是保存或任何东西。

一切都在当地环境中完美无缺所以我真的不知道如何继续在这里。我尝试通过在每个步骤之间打印来跟踪它,并且我发现它如上所述挂起的位置,但它仍然没有告诉它为什么会挂起,因为有时候这段代码工作得很好。

有关问题可能是什么或者我应该如何调试的任何建议?谢谢!

1 个答案:

答案 0 :(得分:3)

修改

由于应用服务/功能(2.7.8)和urllib3模块使用的python版本,这是一个问题,请参阅here。在Web应用程序更新python版本之前,可以忽略或记录导致应用程序崩溃的错误。

您可以将自定义版本的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/debugConsole - &gt; LogFiles/Application/Functions。您还可以通过host.json更改日志记录行为。