为了账号安全,请及时绑定邮箱和手机立即绑定

Lambda + Python + 退出代码

Lambda + Python + 退出代码

猛跑小猪 2021-07-09 18:11:35
我遇到了一个用 Python 编写的简单 AWS Lambda 函数的问题。当我运行我的 Lambda 函数时,我的代码按预期运行,结果是正确的,但仍然以错误代码(退出代码): 结束"Process exited before completing request",这导致 Lambda 运行 3 次(异步)。您是否有任何最佳实践来管理 Lambda 的退出代码?#!/usr/bin/pythonimport boto3import sysimport tweepyimport datetimesession = boto3# Init s3 clients3 = 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)谢谢你的帮助,
查看完整描述

1 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

短的

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


更长

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

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


查看完整回答
反对 回复 2021-07-13
  • 1 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信