【问题标题】:Lambda + Python + Exit CodeLambda + Python + 退出代码
【发布时间】:2019-03-15 07:55:31
【问题描述】:

我遇到了一个用 Python 编写的简单 AWS Lambda 函数的问题。

当我运行我的 Lambda 函数时,我的代码按预期运行,结果是正确的,但仍然以错误代码(退出代码)结束:"Process exited before completing request",这导致 Lambda 运行 3 次(异步) .

您有管理 Lambda 退出代码的最佳实践吗?

#!/usr/bin/python

import boto3
import sys
import tweepy
import datetime

session = boto3

# Init s3 client
s3 = session.resource('s3')

def get_data_and_push(s3_bucket, s3_key, user):
    # Retrieve CSV file
    try:
        dest = s3.Object(s3_bucket, s3_key)
        dest.download_file(tmpfile)
    except Exception, e:
        print 'An error occured while trying to download CSV file'
        print 'This exception has been thrown :'
        print e
        sys.exit(1)

    # Authenticate to Twitter
    try:
        auth = tweepy.OAuthHandler(t_consumer_key, t_consumer_secret)
        auth.set_access_token(t_access_token_key, t_access_token_secret)
        api = tweepy.API(auth)
    except Exception, e:
        print 'Cannot authenticate to Twitter.'
        print 'This exception has been thrown :'
        print e
        sys.exit(2)

    data = api.get_user(user)
    print 'User : ' + data.screen_name
    print 'Followers : ' + str(data.followers_count)
    print 'Friends : ' + str(data.friends_count)
    print '-----------'

    # Get today's date
    today = datetime.datetime.now().strftime("%Y-%m-%d")

    # Write result
    try:
        # Write result at the end of the file
        file = open(tmpfile, 'a')
        file.write(today + ',' + str(data.followers_count) + ',' + str(data.friends_count)+ '\n')
        file.close()
    except Exception, e:
        print 'Unable to write in temp file'
        print 'This exception has been thrown :'
        print e
        sys.exit(5)

    # Upload final file
    try:
        # Push file to S3
        dest.upload_file(tmpfile)
    except Exception, e:
        print 'An error occured while trying to upload CSV file'
        print 'This exception has been thrown :'
        print e
        sys.exit(6)

def main(event, context):
    for user in userlist:
        get_data_and_push(bucket, 'export_' + user + '.csv', user)
    sys.exit(0)

感谢您的帮助,

【问题讨论】:

    标签: python amazon-web-services aws-lambda


    【解决方案1】:

    是的,删除代码末尾的sys.exit(0),应该这样做:-)


    更长

    通过执行sys.exit(0),您实际上停止了在 Lambda 函数中运行您的代码的进程。这不是执行者所期望的。

    我假设 Lambda 函数的处理程序实际上是在 AWS 的框架内运行的。因此,您已经处于 python 进程中,并且您的处理程序在 AWS 代码中的某处被调用。所以如果你退出这个过程,你实际上是在走捷径 AWS 的框架,它无法处理 Lambda 执行的解析。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-27
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多