是否可以在 lambda 函数被终止并冷启动之前拦截终止信号以关闭数据库连接?

2024-03-06

为了加快 Lambda 执行速度,我尝试将 Python 代码的某些部分移到处理函数之外

As per Lambda 的文档 https://docs.aws.amazon.com/lambda/latest/dg/running-lambda-code.html:

执行 Lambda 函数后,AWS Lambda 会维护 执行上下文一段时间以等待另一个 Lambda 函数调用。实际上,服务冻结了执行 Lambda 函数完成后的上下文,并解冻上下文 重用,如果 AWS Lambda 在 Lambda 执行时选择重用上下文 函数被再次调用。这种执行上下文重用方法有 以下含义:

Lambda 函数中的任何声明 代码(处理程序代码之外,请参阅编程模型)仍然存在 初始化,在函数运行时提供额外的优化 再次调用。例如,如果您的 Lambda 函数建立了 数据库连接,而不是重新建立连接, 原始连接将在后续调用中使用...

按照他们的示例,我已将数据库连接逻辑移至处理程序函数之外,以便后续WARM该函数的运行可以重用该连接,而不是每次该函数执行时都创建一个新连接。

但是,AWS Lambda 不保证启动的函数的所有后续调用COLD将会运行得很热,所以如果 Lambda 决定COLD启动是必要的,我的代码将重新创建数据库连接。

当这种情况发生时,我假设之前的(WARM) Lambda 拆除的函数实例将与数据库建立一个活动连接,该连接从未关闭,如果该模式不断重复,我怀疑我会有很多孤立的数据库连接。

Python 有没有办法检测 Lambda 是否试图杀死我的函数实例(也许它们发送 SIGTERM 信号?)并让它关闭活动的数据库连接?

我使用的数据库是Postgres。


接受的答案不再正确,它可能是过去的,但今天你的 lambda 应该收到一个SIGTERM当 AWS 打算终止时。

AWS 在此处提供了有关处理 Python 和其他语言的正常关闭的官方示例:

https://github.com/aws-samples/graceful-shutdown-with-aws-lambda/tree/main/python-demo https://github.com/aws-samples/graceful-shutdown-with-aws-lambda/tree/main/python-demo

但实际上你这样做:

import signal

def exit_gracefully(signum, frame):
  print('SIGTERM RECEIVED')

signal.signal(signal.SIGTERM, exit_gracefully)

这会在容器关闭时调用,并且您有 300 毫秒的时间进行清理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在 lambda 函数被终止并冷启动之前拦截终止信号以关闭数据库连接? 的相关文章

  • 按 A 列删除重复项,保留 B 列中具有最高值的行

    我有一个数据框 A 列中有重复值 我想删除重复项 保留 B 列中具有最高值的行 So this A B 1 10 1 20 2 30 2 40 3 10 应该变成这样 A B 1 20 2 40 3 10 我猜想可能有一种简单的方法可以做到
  • 通过 rpy 将 SPSS 文件(.sav)导入 pandas 时如何保留标签?

    我正在寻找使用 SPSS 文件 sav pandas 在没有 SPSS 程序的情况下 典型文件转换为 csv 后的样子如下 在调查前两行的含义时 我不知道 SPSS 似乎第一行包含Labels 而第二行包含VarNames 当我将文件带入
  • 用定点迭代求解该方程

    我怎样才能解这个方程 x3 x 1 0 使用定点迭代 有没有定点迭代我可以在网上找到代码 尤其是Python 吗 Using scipy optimize fixed point http docs scipy org doc scipy
  • 在 python 中查找价格动量的有效方法:对列的最后 n 个条目求平均值

    我正在定义价格动量是给定股票过去动量的平均值n days 反过来 动量是一种分类 如果当天的收盘价高于前一天 则每天标记为 1 如果当天的收盘价低于前一天 则标记为 1 我的库存变化百分比如下 df close in percent np
  • 从另一个文件覆盖函数中的变量

    一 总结 我不知道如何从另一个文件覆盖函数中的变量 2 示例 2 1 配置 I use logbook http logbook pocoo org and pyfancy https github com ilovecode1 Pyfan
  • Selenium 上的切换窗口

    我在 Python 中使用 Selenium 和 PhantomJS 我需要打开一个新窗口并控制它 出于测试目的 我这样做 from selenium import webdriver driver webdriver PhantomJS
  • 配置 Flask 以正确加载 Bootstrap js 和 css 文件

    如何使用 Flask 中的 url for 指令来正确设置 以便使用 Bootstrap 和 RGraph 的 html 页面可以正常工作 假设我的 html 页面看起来像这样 部分片段
  • 带有redirect_uri的social-auth-app-django Facebook后端状态

    我知道我的问题听起来像是重复的 但我到处寻找但没有找到任何解决方案 我正在努力为我的 django web 应用程序实现社交登录 到目前为止 谷歌 推特和雅虎登录均按预期工作 但facebook总是给出以下错误 URL 被阻止 此重定向失败
  • 如何列出静态链接的 python 版本中可用的所有 openssl 密码?

    在python 2 7 8到2 7 9升级中 ssl模块从使用更改为 DEFAULT CIPHERS DEFAULT aNULL eNULL LOW EXPORT SSLv2 to DEFAULT CIPHERS ECDH AESGCM D
  • 在Python中将用户昵称转换为正式名字

    我正在尝试根据 Python 中的用户名字和姓氏映射来自不同系统的用户 一个问题是 名字在很多情况下都是 昵称 例如 对于用户来说 他的名字在一个系统中是 Dave 而在另一个系统中是 David python 中有没有简单的方法可以将这些
  • 如何在Python中获取套接字的外部IP?

    当我打电话时socket getsockname 在套接字对象上 它返回我的机器的内部 IP 和端口的元组 但是 我想找回我的外部IP 最便宜 最有效的方式是什么 如果没有外部服务器的配合 这是不可能的 因为您和另一台计算机之间可能存在任意
  • 如何更改Python使用的SQLite版本?

    我在 Debian 9 12 上安装了 Python 3 8 和 SQLite 3 16 2 并且需要升级到较新版本的 SQLite 我已经下载并编译了 SQLite 网站上提供的合并 并将其放入 usr bin 所以当我这样做时 sqli
  • 当我移动我的 pygame 角色时,它会留下痕迹[重复]

    这个问题在这里已经有答案了 我一直在尝试用 Python 制作一个游戏 但是当我移动我的角色时 它会留下痕迹 我知道它并没有显示出那么多 但如果你靠近的话 你可以看到这条踪迹 这真的让我很困扰 这是我的代码 import pygame im
  • AWS 卷备份为空

    我是 AWS 新手 我有一个在 AWS 中运行的实例 现在我想将该实例卷放入新实例中 该卷包含大约 8GB 的 内容 我按照以下帖子中的第一个答案进行操作 更改 ec2 实例的密钥对 https stackoverflow com ques
  • AWS Cognito - 如何确定用户是否使用电子邮件或电话号码注册

    我们已经按照描述实施了自定义身份验证触发器here https docs aws amazon com cognito latest developerguide user pool lambda challenge html 我们设置了用
  • gstreamer 中的无缝视频循环

    我正在尝试使用 gstreamer 循环播放视频 它是 python 绑定 第一次尝试是hook EOSmessage并为管道生成搜索消息 import gi gi require version Gst 1 0 from gi repos
  • 从 Qthread 更新 Python GUI 元素

    所以我知道有很多关于使用 Qthread 更新 GUI 中的元素的帖子 我尽了最大努力去检查这些 但仍然有一个问题 我正在尝试创建一个 GUI 该 GUI 在单击按钮时运行一个方法 然后该方法启动一个新线程 然后该线程向 GUI 发出信号以
  • 通过过滤对 Pyspark Dataframe 进行分组

    我有一个数据框如下 cust id req req met 1 r1 1 1 r2 0 1 r2 1 2 r1 1 3 r1 1 3 r2 1 4 r1 0 5 r1 1 5 r2 0 5 r1 1 我必须观察客户 看看他们有多少要求 看看
  • Pandas:合并多个数据框并控制列名称?

    我想将九个 Pandas 数据帧合并到一个数据帧中 对两列进行联接 控制列名称 这可能吗 我有九个数据集 它们都有以下列 org name items spend 我想将它们加入到具有以下列的单个数据框中 org name items df
  • matplotlib imshow() 和像素强度

    我试图了解矩阵的值是如何输入到 matplotlib 的imshow 函数确定灰度模式下像素的强度 考虑示例代码 import random import matplotlib pyplot as plt import matplotlib

随机推荐