为了加快Lambda的执行速度,我尝试将Python代码的某些部分移至处理函数之外
根据Lambda的文档:
执行Lambda函数后,AWS Lambda会在一段时间内维护执行上下文,以等待另一个Lambda函数调用。实际上,如果AWS Lambda在再次调用Lambda函数时选择重用上下文,则该服务会在Lambda函数完成后冻结执行上下文,并解冻该上下文以进行重用。这种执行上下文重用方法具有以下含义:
Lambda函数代码中的所有声明(在处理程序代码之外,请参阅编程模型)都将保持初始化,从而在再次调用该函数时提供其他优化。例如,如果您的Lambda函数建立数据库连接,而不是重新建立连接,则在后续调用中将使用原始连接…
按照他们的示例,我将数据库连接逻辑移到了处理程序函数之外,因此该函数的后续WARM运行可以重新使用该连接,而不是每次执行该函数时都创建一个新的连接。
但是,AWS Lambda无法保证启动COLD的函数的所有后续调用都将正常运行,因此,如果Lambda认为有必要启动COLD,我的代码将重新创建数据库连接。
发生这种情况时,我假设Lambda拆除的函数的先前(WARM)实例将与数据库保持有效连接,而该连接从未关闭,并且如果该模式不断重复,我怀疑我会有很多孤立的DB连接。
Python中是否有一种方法可以检测Lambda是否试图杀死我的函数实例(也许它们发送了SIGTERM信号?)并关闭了活动的数据库连接?
我正在使用的数据库是Postgres。
我有一个用 Python 编写的 lambda 函数,它使用几个重量级依赖项(NumPy、pandas、goodtables 等)并且还连接到 VPC(用于访问 Postgres RDS 实例)
此函数的冷启动执行时间在一段时间后(> 4-6 小时)执行时非常大(16.2 秒)
但是,如果我更新函数代码并再次调用它(第一次执行后不久),冷启动执行时间会急剧减少(3 秒)
如果我在不更新的情况下再次调用该函数,这是一个热启动,则执行时间会进一步缩短(313 毫秒)
我怀疑第一次冷启动(16.2 秒)是在 Lambda 设置 ENI 以访问 VPC 资源时,并且在第二次冷启动(3 秒)期间重复使用 ENI,因此可以避免重新创建 ENI 所花费的时间。
我正在尝试优化此功能的冷启动时间,并希望它从头开始,以查看在完全冷启动(即没有 ENI + 冷启动)时它的执行速度。
有没有办法做到这一点并反复执行?
如果我用 Python 编写的 Lambda 函数需要 1.8 秒来初始化(在冷启动期间)和 400 毫秒来执行,我是否需要为 400 毫秒的执行时间或整个 2.2 秒的初始化 + 执行时间付费?
从 X 射线,我看到:
从 CloudWatch 日志中,我看到:
Duration: 404.42 ms Billed Duration: 500 ms Memory Size: 448 MB Max Memory Used: 113 MB
Run Code Online (Sandbox Code Playgroud)
我从中了解到的是,我被收取了 500 毫秒的执行时间,这是否意味着代码初始化(例如导入内容)是免费的?
我今天发现了这个意外的时候,我注意到一个Python代码曾使用内置函数 all作为变量标识符来存储列表理解的结果,并没有抛出一个错误,所以我尝试以下:
type('abc')
Out[1]: str
type('abc') == str
Out[2]: True
str = int
type('abc') == str
Out[4]: False
type('abc')
Out[5]: str
type = [1,2,3]
type('abc')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-7-a74a7df76db1> in <module>()
----> 1 type('abc')
TypeError: 'list' object is not callable
Run Code Online (Sandbox Code Playgroud)
希望,当我问为什么在Python中允许这种行为时,这是一个有效的问题.
或者更好的是,我如何确保内置函数str是真的str而不是说,int所以str(123)不会被int(123)意外评估?
我正在尝试修复CSS样式表,以确保在网页上显示样式元素.
这就是CSS样式表的链接方式:
<link rel="stylesheet" href="themes/default/style.css" type="text/css" media="screen" title="" charset="utf-8"/>
Run Code Online (Sandbox Code Playgroud)
这是HTML代码:
<a href="search" class="floatleft shadowed">Advanced Search</a>
<a href="post_ad" class="floatright post-ad">Post an Ad Now</a>
Run Code Online (Sandbox Code Playgroud)
现在,当我在谷歌浏览器中使用"检查元素"工具并点击第一行时,我看到:

该Advanced Search链接显示在页面上.没有问题.但如果我点击下一行,我会看到:

因此,Post an Ad Now链接不会显示在页面上.我不知道这个CSS来自哪里,肯定没有指定style.css,谷歌Chrome没有显示来源(例如style.css:101)
.pop-up-ad, .popadtext, .popunder-adv, .popup-ad, .popupAd, .popupAdOuter,
.popupAdWrapper, .popup_ad, .portalCenterContentAdBottom, .portalCenterContentAdMiddle,
.portalCenterContentAdTop, .portal_searchresultssponsoredlist, .portalcontentad, .post-ad,
.post-adsense-bottom, .post-advert, .post-advertisement, .post-googlead, .post-load-ad,
.post-nativeadcarousel {
display: none;
}
Run Code Online (Sandbox Code Playgroud)
如何确保Post an Ad Now链接显示在页面上?
我如何找出神秘CSS信息的来源?
Is it possible to use COALESCE (or any other way) to replace NULL values from a TIMESTAMP column with a string like 'N/A'?
In my SELECT statement I have a
CASE WHEN n.expiration_date::date IS NULL THEN 'N/A' ELSE n.expiration_date::date END
Run Code Online (Sandbox Code Playgroud)
When I try this, I get this error, which makes sense:
invalid input syntax for type date: "N/A"
I found this blog post too about this problem. Is there a way around it?
aws-lambda ×3
python ×2
python-2.7 ×2
aws-billing ×1
coalesce ×1
css ×1
html ×1
postgresql ×1
signals ×1
sql-null ×1