Лямбда + питон + код выхода - PullRequest
       2

Лямбда + питон + код выхода

0 голосов
/ 10 октября 2018

Я столкнулся с проблемой простой лямбда-функции AWS, написанной на Python.

Когда я запускаю свою лямбда-функцию, мой код работает должным образом, результат правильный, но все равно заканчивается ошибкойкод (код выхода): "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)

Спасибо за помощь,

1 Ответ

0 голосов
/ 10 октября 2018

Short

Да, удалите sys.exit(0) в конце кода, который должен это сделать: -)


Longer

Делая sys.exit(0) вы фактически останавливаете процесс, выполняющий ваш код в лямбда-функции.И это не ожидается от исполнителя.

Я предполагаю, что обработчик лямбда-функции фактически выполняется из среды AWS.Следовательно, вы уже находитесь в процессе Python, и ваш обработчик вызывается где-то в коде AWS.Таким образом, если вы выходите из процесса, вы фактически сокращаете структуру AWS, которая не может обработать разрешение выполнения Lambda.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...