Python - 当事件接近时做(某事)

时间:2013-06-23 09:37:20

标签: python events dictionary notifications

我正在为我们的游戏社区创建一个事件通知系统。但是,我不完全确定从哪里开始。

我有一个事件及其时间的字典,例如:

{'Game Night': 19:00 2013-06-29,
'3CB vs ST3 Match': 18:45 2013-07-02,
'Website Maintainance': 13:00 2013-07-16,
etc}

使用strptime()已将时间转换为正确的日期时间格式。我现在需要的是当其中一个事件即将发生时通知用户(例如15分钟警报,然后是5分钟警报)。

例如:

"NOTICE: 3CB vs ST3 Match will begin in 15 minutes!"
10 minutes later...
"NOTICE: 3CB vs ST3 Match will begin in 5 minutes!"

我的问题是: 如何让python等到事件接近(通过比较当前时间和事件的时间),然后执行一个动作(例如我的情况下的通知)?

P.S 我正在使用Python 2.7.5(由于缺少API更新)

1 个答案:

答案 0 :(得分:0)

尝试循环,直到您的检查评估为True:

import time
interval = 0.2  # nr of seconds
while True:
    stop_looping = myAlertCheck()
    if stop_looping:
        break
    time.sleep(interval)

睡眠为您提供其他任务的CPU时间。

修改

好的,我不确定你的问题到底是什么。首先我想你想知道如何让python'等待'一个事件。现在,您似乎想知道如何将事件日期与当前日期进行比较。 我认为以下是一个更完整的方法。我想你可以自己填写细节吗?

import time
from datetime import datetime

interval = 3  # nr of seconds    
events = {
    'Game Night': '14:00 2013-06-23',
    '3CB vs ST3 Match': '18:45 2013-07-02',
    'Website Maintainance': '13:00 2013-07-16', 
}

def myAlertCheck(events):
    for title, event_date in events.iteritems():
        ed = datetime.strptime(event_date, '%H:%M %Y-%m-%d')
        delta_s = (datetime.now() - ed).seconds
        if delta_s < (15 * 60):
            print 'within 15 minutes %s starts' % title
            return True

while True:
    stop_looping = myAlertCheck(events)
    if stop_looping:
        break
    time.sleep(interval)