我正在为Android客户端使用GAE开发服务,并且需要定期刷新应用程序数据,比如说每分钟一次。
在架构方面,这就是应用程序的工作方式:
我知道GAE为自动计划任务提供cron作业,但据我所知,它不适合这种高频任务(或者甚至不支持)
我可以用于此用例的最佳做法/工具是什么?
此外,无论应用程序是否打开,是否建议在后台更新数据?或者只是在用户启动后立即更新?
[编辑]我还想知道是否每分钟提取数据是正确的方法,还是应该推动服务呢?
提前谢谢。
答案 0 :(得分:2)
"it's not suitable for such high frequency tasks (or not even supported)"
- 这不完全正确。
Cron作业可以低至1分钟的间隔运行,请参阅The schedule format:
以下是时间表示例:
every 12 hours every 5 minutes from 10:00 to 14:00 every day 00:00 every monday 09:00 2nd,third mon,wed,thu of march 17:00 1st monday of sep,oct,nov 17:00 1 of jan,april,july,oct 00:00
如果您不需要在特定时间运行定期作业,但是 而只需要定期运行它,使用以下形式:
every N (hours|mins|minutes) ["from" (time) "to" (time)]
因此,间隔1分钟,您可以使用:
every 1 minutes
如果您需要的间隔时间少于1分钟,则可以使用the deferred library - 任务可以从排队时刻延迟,并以秒为单位指定时间值:
deferred.defer(do_something_expensive,“Foobie bletch”,12, _countdown = 30 ,_queue =“myqueue”)
上一个问题的答案实际上取决于您希望应用程序的行为方式:在客户端应用程序启动时让客户端应用程序立即可用数据,或让客户端应用程序等到后端收集数据。
如果您只是将收集到的数据转发给客户端,无论哪种方式都没有问题,那么就没有“常规做法”(当然,除了不断更新的成本更高)。但是,如果您计划提供处理历史数据的结果,您可能需要不断更新(或者只是在市场营业时间内)。
<强>更新强>
Task Queues优于延迟库,使用taskqueue.add()的可选countdown
或eta
参数可以使用延迟功能:
倒计时 - 此任务应运行或租用的未来秒数。默认为零。如果,请不要指定此参数 你指定了一个eta。
eta - 一个
datetime.datetime
,指定任务运行的绝对最早时间。如果,则无法指定此参数 指定了倒计时参数。这个论点可以是时间 区域感知或时区天真,或设置为过去的时间。如果 参数设置为None,默认值为now。对于拉动任务,没有 工人可以在eta指示的时间之前租用任务 参数。