Ich habe es zum ersten Mal mit einem Dekorateur und einem Signal geschrieben. Es ist ein Dekorateur, der Sie benachrichtigt, wenn die Funktion nicht innerhalb der angegebenen Zeit beendet wird. Es scheint, dass Sie es verwenden können, um Sie über Stapel zu informieren, die zu lange dauern, wenn Sie Nachtstapel in AWS ausführen.
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'):
'''
Wie benutzt man:Ein Dekorateur, der Sie mit aws sns benachrichtigt, wenn er nicht innerhalb der angegebenen Ausführungszeit fertig ist.
@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