Skip to content

Instantly share code, notes, and snippets.

@a3linux
Forked from siroken3/pytimekeeper.py
Created September 9, 2013 23:36
Show Gist options
  • Save a3linux/6502982 to your computer and use it in GitHub Desktop.
Save a3linux/6502982 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
import signal
import boto.sns
def timeout(limit, topic, subject='Execution Timeout.', body='Please check program.', region='us-east-1'):
'''
使い方:指定した実行時間に終了しなかった場合、awsのsnsで通知するデコレータです。
@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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment