Aws lambda aws lambda上的wsgi应用程序中的非活动时间是如何计算的?

Aws lambda aws lambda上的wsgi应用程序中的非活动时间是如何计算的?,aws-lambda,sleep,wsgi,Aws Lambda,Sleep,Wsgi,主要问题是:在aws Lambda上部署的wsgi应用程序中如何计算时间 假设我部署以下简单的Flask应用程序: 从烧瓶导入烧瓶 app=烧瓶(名称) @附件路线(“/”) def hello(): 返回“你好,世界!”,200 在AWS Lambda上使用Zappa,配置如下: { "dev": { "app_function": "simple_application.app", "profile_name": "default",

主要问题是:在aws Lambda上部署的wsgi应用程序中如何计算时间

假设我部署以下简单的Flask应用程序:

从烧瓶导入烧瓶
app=烧瓶(名称)
@附件路线(“/”)
def hello():
返回“你好,世界!”,200
在AWS Lambda上使用Zappa,配置如下:

{
    "dev": {
        "app_function": "simple_application.app",
        "profile_name": "default",
        "project_name": "simple_application",
        "runtime": "python3.7",
        "s3_bucket": "zappa-deployments-RANDOM",
        "memory_size": 128,
        "keep_warm": false,
        "aws_region": "us-east-1"
    }
}
现在,如果AWS对我的网站有请求,它将启动一个包含我的代码的容器,让它处理请求。假设请求在200毫秒内送达

显然,内置wsgi服务器的Lambda会继续运行(默认情况下,Zappa会使Lambda运行至少30秒)

现在,我们来看一下各个子问题:

  • 执行死刑需要多少时间

    • 200毫秒,因为请求持续时间
    • 30秒,因为我的lambda执行时间低于限制
    • 直到lambda被AWS杀死以回收空间(甚至可能在30-45分钟后发生)
  • 如果出现另一个请求(并且第一个请求仍在服务中),第二个请求是否会启动另一个Lambda容器,或者它将排队,直到超过阈值时间

  • 通过阅读AWS Lambda定价页面,我本以为只需200毫秒就可以收费,但我敢打赌30秒就可以收费,因为毕竟是我强加了这样的限制

    如果我只收取200毫秒(以及后续请求时间)的费用,但容器持续不间断运行30-45分钟,我还有第三个子问题:

  • 假设现在我想使用一个全局变量作为一个简单的本地缓存,并在终止容器之前将其与数据库(比如DynamoDB)同步。 为此,我希望将lambda的执行时间限制提高到15m,然后在lambda创建时设置一个计时器来启动一个同步状态的函数,并在14m30后中止该函数

    在该设置中,运行时间将如何变化(即,在一定时间后启动计时器)

  • 该子问题的拟议lambda代码为:

    从烧瓶导入烧瓶
    从线程导入计时器
    从数据库导入访问
    导入系统
    lambda_uuid=“SOME-uuid-OF-lambda-INSTANCE”
    #收集访问次数
    访问次数=0
    def报告_访问():
    访问次数(uuid=lambda_uuid,访问次数=visions).save()
    系统出口(0)
    t=计时器(14*60+30,报告访问)
    t、 开始()
    #烧瓶路线的开始
    app=烧瓶(名称)
    @附件路线(“/”)
    def hello():
    访问量=访问量+1
    返回“你好,世界!”,200
    
    提前感谢您提供的任何信息

    默认情况下,Zappa使lambda运行至少30秒

    我找不到支持这一点的文档,而且我能找到的所有Zappa文档都指出,一个Zappa函数将在返回响应后立即结束(就像任何其他AWS Lambda函数一样),因此,您只需为生成响应所花费的毫秒付费

    我确实看到Zappa Lambda函数的默认最大执行时间是30秒。也许这就是你困惑的地方?该设置只是告诉AWS Lambda,如果正在运行的函数实例运行了那么长的时间,就将其杀死

    通过阅读AWS Lambda定价页面,我本以为只需200毫秒就可以收费,但我敢打赌30秒就可以收费,因为毕竟是我强加了这样的限制

    您将按函数运行的确切时间收费。因此,如果它运行200毫秒,那么您将收取200毫秒的费用

    如果我只收取200毫秒(以及后续请求时间)的费用,但容器持续不间断运行30-45分钟,我还有第三个子问题:

  • 它不会持续运行那么长时间,它在返回响应时结束
  • 如果函数实例的运行时间超过30秒,则告诉Lambda将其杀死,因此,在当前设置下,它的运行时间永远不会超过30秒
  • AWS Lambda函数当前的最大运行时间为15分钟,因此无论如何,它不可能运行30-45分钟