google-app-engine - 具有 ETA 的 App Engine 任务的触发时间比计划晚得多

标签 google-app-engine scheduled-tasks

我正在使用 Google App Engine 任务推送队列来安排我希望在计划时间的秒精度内发生的 future 任务。

通常我会在 30 秒后安排一个任务,这会触发系统状态的变化,最后安排另一个 future 的任务。

在我的本地开发服务器上一切正常。

但是,现在我已经部署到 GAE 服务器,我注意到计划任务运行较晚。我见过他们甚至在预定后两分钟就开始运行。

从任务队列管理控制台,它实际上显示了 ETA:

ETA: "2013/11/02 22:25:14 0:01:38 ago" 
Creation Time: "2013/11/02 22:24:44 0:02:08 ago"

为什么会这样?

我找不到任何有关 ETA 安排的任务的期望和精度的文档。

我正在用 python 编程,但我怀疑这有什么区别。\

在Python代码中,eta参数的记录如下:

eta: A datetime.datetime specifying the absolute time at which the task
        should be executed. Must not be specified if 'countdown' is specified.
        This may be timezone-aware or timezone-naive. If None, defaults to now.

我的队列设置:

queue:    
- name: mgmt
  rate: 30/s

系统没有任何负载,除了 5 个任务应该每 30 秒左右运行一次。

更新:

我找到了https://code.google.com/p/googleappengine/issues/detail?id=4901这是一个已接受的及时队列功能请求,尽管似乎没有采取任何措施。它接受这样一个事实:预计到达时间的任务可能会延迟运行很多分钟。

我可以使用哪些其他替代机制来安排第二精度的触发器?

最佳答案

GAE 不保证其数据中心内部和数据中心之间的时钟同步;请参阅UTC Time on Google App engine?进行相关讨论。因此,您甚至无法准确指定绝对时间,即使他们(不同)保证任务在目标时间的某个容差范围内执行。

如果您确实需要这种精度,您可以考虑设置一个持久的 GAE“后端”实例,使其与受信任的外部时钟同步,并提供任务排队和执行服务。

(旁白:不幸的是,这种方法引入了单点故障,因此要解决这个问题,您只需采取后续步骤并构建这些后端的整个集群......但在这一点上,您不妨看看其他地方,而不是GAE,因为您正在从 GAE“自动传输”模型转向 AWS 的“手动传输”模型。)

关于google-app-engine - 具有 ETA 的 App Engine 任务的触发时间比计划晚得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19750221/

相关文章:

python - Google App Engine - 应用程序无法发送日志

linux - 安排作业从 ftp 下载文件

java - 对象化和 TimerTask : No API environment is registered for this thread

docker - 尝试在 Windows 2016 Core 容器中创建计划任务时出错

java - 如何检索数据存储实体的键

google-app-engine - Google Appengine 游标

python-2.7 - Google Datastore 中的 get() 无法按预期工作

mysql - 第二代 Cloud SQL - 无法创建故障转移

java - 安排 Spark 作业 Java

python-3.x - 如何运行计划的 AWS Lambda 函数,其中计划时间是一个参数?