繁体   English   中英

有没有办法以编程方式知道有多少个 Lambda 函数的并发实例正在执行?

Is there a way to programmatically know how many concurrent instances of a Lambda function are executing?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

让我们假设,在给定时间,特定 Lambda 函数的多个实例已被异步调用,

那么,有没有办法找到当前运行的 Lambda 函数的活动并发实例数量?

在仪表板的帐户级别指标中,我们可以找到并发执行的数量。 此外,我认为对于每个新的 Lambda 容器创建,Cloudwatch 都会为 Lambda 函数创建一个新的日志流。 也许可以以某种方式使用它们。

但我想知道是否存在以编程方式获取这些数字的不同方法,例如使用boto3 api 等?

2 个回复

最简洁的答案是不。

可以以编程方式访问 cloudwatch 指标(请参阅: boto3 CloudWatch.Client.get_metric_data ),但是这些指标滞后一分钟。 更糟糕的是,虽然单个 lambda 返回invocations ,但您只能在整个帐户中获得ConcurrentExecutions - 这意味着您能做的最好的事情就是将 lambda 放入它自己的 AWS 帐户中,即使这样,您仍然是一个一分钟后 - 这通常比平均 lambda 寿命长。

不过,我应该指出,通过“保留并发”,lambda 确实公开了一种方法,至少是基本的,控制并发。 示例用例是如果您正在调用具有有限连接池的外部服务/数据库。

我通过让每个正在运行的 lambda 实例将名为 {task}{request_id}.json 的状态 json 文件写入到跟踪 lambda 的存储桶中的特定 s3 文件夹来完成此操作。 我有三个子文件夹,/Running、/Completed、/Failed,所以我可以跟踪完成和失败的总数。 找出有多少正在运行相当于列出 /Running 文件夹中的文件,这非常快,不需要实际获取或打开文件。

每个 lambda 首先在 /Running 中创建一个状态文件。 它在 try/except 块中工作,捕获所有 Python 异常,然后读取该请求的 Running 文件夹中的字典,并使用其他信息更新它,例如总持续时间和任何错误详细信息。 然后删除 /Running 中的状态文件,并在 /Completed 或 /Failed 中创建一个状态文件。

我会说我的应用程序具有持续时间通常为 400 秒的 lambda 实例,因此这种跟踪的开销还不错,并且在任何一项工作中它往往只运行大约几千个 lambda。 如果您的应用程序以高频率启动小型 lambda,那么这可能是过多的开销。

就我而言,请求是在代码中明确提出的(而不是被触发),但每个请求都是异步并行运行的。 AWS Lambda 系统将对超过并发限制的请求进行排队,然后进行节流。 一旦 lambda 可用,排队和限制的请求将启动一个实例,达到并发限制。

我还引入了另一个名为 runtoken{parent_pid}.json 的文件,它建立在一个已知的 s3 文件夹中,每个 lambda 都可以检查它是否有权运行。 提供 {parent_pid} 是为了防止 lambda 混淆旧授权的新授权。 但基本上,如果由于某种原因我需要停止执行,我需要做的就是删除 runtoken 文件。 内部循环中的每个 lambda 都会检查文件是否存在以及 parent_pid(进程 ID)是否与启动它的那个相匹配。 如果没有,它会正常退出并向 AWS lambda 返回成功状态代码,同时将状态发布到 /Failed 文件夹。 如果 lambda 退出并出现错误,例如 sys.exit(1),则 AWS lambda 启动器将重试 lambda 函数。 所有 lambda 都检查 Running 文件夹以确保它们没有被重试。 request_id 在重试的 lambdas 中是相同的。

2 有没有办法让UIView的实例以编程方式从UIControl继承?

在许多iOS书籍和教程中,他们演示了如何在界面构建器中基本上将UIView转换为UIControl,并让它继承新的更高级别功能以响应点击并表现得像按钮一样。 这只需通过更改所选UIView的界面构建器中的类类型即可完成。 这通常用于在有人触摸给定视图控制器的“背景”或主视图时关闭键盘。 ...

4 有没有办法以编程方式重新启动 azure 函数

我有一个 Azure 函数每隔几分钟在计时器上运行一次,在不同的运行时间之后,每次运行都会因为外部 API 而开始失败,并且在 azure 门户中手动点击重启按钮可以解决问题和工作再次工作。 有没有办法让 azure 函数重新启动自己,或者通过 web 钩子或 API 请求或在计时器上运行从外部重 ...

6 如何执行N个Lambda函数的并发实例

我正在尝试查看是否可以在代码中调用Lambda函数的N个实例。 这是我在EC2实例上执行的简单代码: 如您所见,此代码将执行一个名为test的lambda函数200次。 然后它将等待所有这些返回,然后测量需要多长时间(如果您感兴趣,它需要20.883秒-是的,我知道它太长了!)。 ...

8 有没有办法用 lambda 简化这个函数?

所以我会尽量做到描述性。 我有一个 winforms 应用程序,它在标签上对机器进行分组。 我有工作代码,但我想知道是否有其他更好的方法或更易读的代码可以用更少的代码做同样的事情? 所以基本上当计数达到 23 时,我试图根据名为 count 的列将其重置为 0,该列是按位 1 或 0,当它为 1 ...

9 有没有办法以编程方式引用pdf?

我正在使用itextsharp打开动态xfa表单,填写字段并保存。 但是pdf太大,并且itext无法展平动态xfa中的字段。 要解决此尺寸,我要以编程方式重新引用pdf。 即我可以在acrobat Reader中手动打开它,然后再次将其打印为pdf,大小将从5mb减小到200k。 无论 ...

2010-11-17 04:53:19 1 315   .net/ pdf
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM