python - Lambda + Python + 退出代码
问题描述
我遇到了一个用 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)
谢谢你的帮助,
解决方案
短的
是的,删除sys.exit(0)
代码末尾的,应该这样做:-)
更长
通过这样做sys.exit(0)
,您实际上会停止在 Lambda 函数中运行您的代码的进程。这是执行人所不期望的。
我假设 Lambda 函数的处理程序实际上是在 AWS 的框架内运行的。因此,您已经处于 python 进程中,并且您的处理程序在 AWS 代码中的某处被调用。因此,如果您退出该过程,您实际上是捷径 AWS 的框架,它无法处理 Lambda 执行的解析。
推荐阅读
- python - 导入 pyHook。ModuleNotFoundError:没有名为“pyHook”的模块
- npm - 如何使用全局 scss 变量覆盖我的节点模块
- python - Python:加载包含数组的文本文件
- sql - 在 SQL(Oracle) 时间查询中,我得到月份而不是分钟
- java - UnreachableBrowserException: 无法启动新会话 可能的原因是远程服务器地址无效或浏览器启动失败
- java - 重复的音频剪辑不播放 - Java
- nginx - 带有 SSL 的 ActionCable 在生产环境中不起作用
- python - 如何在Opencv中获取校准函数的参数
- node.js - NodeJS使用crypo计算MD5哈希的不同结果
- javascript - vue js中通过父组件上的方法动态绑定一个类