【问题标题】:Update App Engine Tasks?更新 App Engine 任务?
【发布时间】:2012-07-03 22:34:25
【问题描述】:

是否可以更新任务队列中的 AppEngine 任务?
具体来说,更改任务的eta 属性以使其在不同时间运行?

在我的场景中,我的数据存储中的每个项目都附加了一个关联的任务。如果元素已更新,则需要使用新的eta 更新任务。

我目前使用name=item.key().id() 将任务的名称明确设置为项目的ID,以便我可以唯一地引用该任务。

当任务被调用和删除时,名称不会立即被释放(我认为)。这会导致问题,因为我需要在任务执行后立即重新添加它。

【问题讨论】:

    标签: python google-app-engine task-queue


    【解决方案1】:

    使用拉取队列,您可以使用 modify_task_lease 设置相对于当前时间的 ETA(即使您当前没有租用任务)。

    您无法更改拉取队列任务的 ETA。

    每个任务的名称在 7 天内均不可用。

    【讨论】:

    • 但是如何构建 modify_task_lease() 所需的任务实例?虽然有 delete_tasks_by_name(),但没有 modify_task_lease_by_name()。我想知道是否有任何方法可以通过知道它的名称来检索排队的任务。
    【解决方案2】:

    所以我通过以下方式解决了这个问题:
    我在我的模型中为task_name 创建了一个条目。当我创建元素并添加新任务时,我允许应用引擎为该任务生成一个自动的、唯一的名称,然后检索该任务的名称并将其与模型一起保存。

    这使我可以对任务进行引用。

    当我需要修改任务时,我只需删除现有的任务,使用新的eta 创建一个新任务,然后将新任务的名称保存到模型中。

    到目前为止,此功能有效,但将来可能会在Task.add() 函数返回时出现关于任务不一致的问题。

    【讨论】:

    • 这是一个很好的解决方案。但是,您如何检索具有该唯一名称的任务?
    • @Houman。您不需要检索整个任务。有 delete_tasks_by_name() 函数。顾名思义,您只需要知道任务名称即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2018-05-19
    • 2010-09-14
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多