Когда вызывается функция Lambda
, создается один Lambda
параллелизм. Вы можете думать о параллелизме как о контейнере.
После того, как время Lambda
истекло или даже закончилось нормально, параллелизм некоторое время будет жив (возможно, 10 ~ 30 мин). Это означает, что область памяти также все еще сохраняется. Он должен быстро реагировать на непрерывный вызов, потому что загрузка параллелизма занимает время.
Таким образом, если запрашивается другой вызов, параллелизм повторно используется с той же областью памяти.
Вот почему ваш sqlalchemy
сеанс все еще активен при следующем вызове.
Однако, если во время выполнения одного параллельного вызова запрашивается другой вызов, создается другой параллелизм, не разделяющий область памяти. В это время ваш sqlalchemy
сеанс отсутствует.
Вы можете проверить на небольшом примере. Вызовите функцию Lambda
10 раз с интервалом 1 сек c соответственно и проверьте вывод. Две функции будут показывать разные результаты.
variable = 10
def lambda_function(event, context):
global variable
print(variable)
variable += 1
# output: the variable increase because it reuse memory.
10
11
12
13
14
.
.
.
import time
variable = 10
def lambda_function(event, context):
global variable
print(variable)
variable += 1
time.sleep(60) # Lambda timeout also should be long enough
# output: the variable doesn't increase because new concurrency is used while previous concurrencies are pending at sleep(60)
10
10
10
10
.
.
Кроме того, вы можете проверить, сколько одновременных операций выполняется в CloudWatch
.