我有一个Azure python HTTP触发器函数,需要执行动态代码。如果100个用户同时执行动态代码,即使一个用户有坏代码(无限循环(,其他有效请求也会失败。Azure中是否有一种方法可以将HTTP函数作为其自己的实例来调用,以便其他API请求不会受到影响或以编程方式终止无效请求?
我在host.json中尝试了functionTimeout,但这也终止了同时处理的无效请求和其他有效请求。
感谢
这种行为可能是由于Python的单线程体系结构造成的。这是预期的行为。
Python函数开发人员参考资料中介绍了如何处理此类场景:https://learn.microsoft.com/en-us/azure/azure-functions/functions-reference-python#scaling-和并发
以下是处理此问题的两种方法:
- 使用异步调用
- 为每个主机添加更多的语言工作进程,这可以通过使用应用程序设置来完成:FUNCTIONS_worker_PROCESS_COUNT,最大值为10。(因此,基本上,对于使用任何循环模拟的CPU绑定工作负载,我们建议将FUNCTION S_WORKER_PROCESS S_COUNT设置为更高的数字,以并行化给定给单个实例的工作。[请注意,每10秒就会产生一个新的语言工作者,直到他们热身。]
下面是一个GitHub问题,它详细讨论了这个问题:https://github.com/Azure/azure-functions-python-worker/issues/236