Je l'ai écrit pour la première fois à l'aide d'un décorateur et d'un signal. C'est un décorateur qui vous avertit si la fonction ne se termine pas dans le délai spécifié. Il semble que vous puissiez l'utiliser pour vous informer des lots qui prennent trop de temps lorsque vous exécutez des lots de nuit sur AWS.
pytimekeeper.py
# -*- coding: utf-8 -*-
import signal
import boto.sns
def timeout(limit, topic, subject='Execution Timeout.', body='Please check program.', region='us-east-1'):
'''
Comment utiliser:Un décorateur qui vous avertit avec aws sns s'il ne se termine pas dans le délai d'exécution spécifié.
@timeout(limit=3600, topic='arn:aws:sns:xxxxxxxx:yyyyyyy')
def long_time_function():
very_very_long_calc()
'''
def notify_aws_sns(signum, frame):
conn = boto.sns.connect_to_region(region)
conn.publish(topic, body, subject)
def __decorator(function):
def __wrapper(*args, **kwargs):
signal.signal(signal.SIGALRM, notify_aws_sns)
signal.alarm(limit)
result = function(*args, **kwargs)
signal.alarm(0)
return result
return __wrapper
return __decorator
Recommended Posts