我在Azure服务计划的Azure Functions应用程序中有一个功能。
我的功能在python中。它包含一个循环,使用tweepy模块从twitter API中获取数据,并将结果写入本地临时文件,然后将其保存到Azure存储中的文件(我使用AppenedBlobService)。
问题
问题有时我的功能只是冻结(?)。它会提出请求,获得结果,保存结果,然后随时冻结。它不会停止,当我看到监视器窗格时,它仍在运行(三个蓝点)。阻止它的唯一方法是我必须重新启动一个实例(过了一会儿,蓝点变成橙色感叹号)。它没有显示任何错误,也没有产生任何结果。它没有异常,最后块没有被执行,感觉就像函数就在那里,没有执行新行,没有停止,没有。
令人困惑的是,这种情况发生在执行期间的不同步骤中。有时它会在调用API时发生(因此看起来该方法永远不会返回),有时在Storage中检查blob存在时(通过BlockBlobService完成),有时候在保存结果时。
假设
我的假设是API存在问题。但是,当我在本地测试时,API没有问题。我可以毫无问题地进行大量连续请求,而在Azure功能中3-5次请求后它会冻结。 (它也慢得多。) 所以另一种可能性是将文件保存到存储器出错了,但问题是,有时它会正确保存结果。它保存,然后循环回API调用并卡住,或者它完成API调用并卡住,而不是保存或任何东西。
一切都在当地环境中完美无缺所以我真的不知道如何继续在这里。我尝试通过在每个步骤之间打印来跟踪它,并且我发现它如上所述挂起的位置,但它仍然没有告诉它为什么会挂起,因为有时候这段代码工作得很好。
有关问题可能是什么或者我应该如何调试的任何建议?谢谢!
答案 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更改日志记录行为。