【问题标题】:Is there a design pattern for scheduling an "event" to happen in the future?是否有安排未来发生的“事件”的设计模式?
【发布时间】:2013-08-06 23:12:04
【问题描述】:
我正在开发一个 Web 应用程序,该应用程序会在发生特定事件时向用户发送文本消息。基本条件如下:
- 事件发生不止一次,但频率不合理。
- 我可以随时预测该事件是否会在未来 10 天内发生
-
如果事件发生在该时间段内,我可以预测事件将在 1 秒内发生的时间。
我想在事件发生前(约 5 分钟)向用户发送短信。
在未来某个时间“安排”方法调用(发送文本)的最佳方式是什么?
【问题讨论】:
标签:
python
design-patterns
web-applications
scheduled-tasks
【解决方案1】:
这取决于环境。乍一看,我认为 cron 是您正在寻找的;在您的服务器上创建一个每分钟调用一个脚本的 crontab 条目,然后该脚本应查找某个标志(在文件中、数据库中、您认为合适的任何地方)以查看是否有要发送的内容。
基本上,您需要一个队列(用于多个用户)和一个定时 php 脚本。
见https://en.wikipedia.org/wiki/Cron
【解决方案2】:
使用每分钟运行一次的 cronjob,并在 6 分钟内查找尚未通知的任何事件
或使用类似的命令
future_pattern = "%M %H %d %m ? %Y"
command = 'python do_something.py'
evt_tim = datetime.datetime(2013,8,22,14,22) # aug 22,2013 @ 2:22pm
notify_time = evt_time - datetime.timedelta(minutes=5)
subprocess.call("%s %s"%(notify_time.strftime(future_pattern),command)
或使用为此提供的服务,例如 twillio
http://blog.iron.io/2012/10/how-to-schedule-sms-and-calls-on-twilio.html
【解决方案3】:
在 JAVA 中我会推荐 QUARTZ。 IS 易于配置,并且支持持久性。