租赁拉动任务时极少发生的锁定可用性故障

时间:2018-07-21 15:18:50

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

我正在构建一个Python应用程序,该应用程序具有来自同一拉出队列的多个作品租赁任务。租赁任务时,我会仔细设置lease_seconds,以确保工作人员有足够的时间完成工作并在租约到期之前删除任务。

GAE's document

  

租赁任务使其无法由其他工作人员处理,   直到租约到期为止。

对我来说,大多数时候都是如此。但是,在极少数情况下(每百次租约一次),另一个任务可能在其先前的租约到期之前由另一名工人租用。后端服务似乎无法锁定其可用性。

如何防止此类情况发生?

更新

我刚刚发现我的工人实际上试图在重新发布有问题的任务之前将其删除。 到目前为止,这是我的观察。不确定所有结论是否有效,我将继续关注。

  1. 如果在上有两个(几乎)并发的.add()请求,则会发生这种情况 相同的队列。
  2. 即使只有一名工人从队列中撤出,也会发生这种情况。
  3. 假设我们同时添加了任务A和任务B,它可以在任一任务上发生。 总是发生在任务A(首先租用的任务)
  4. 下面是最近出现的时间戳记(以mm:ss格式)
    • 24:04:添加任务A和B
    • 24:12:租用任务(获取任务A,ETA = 30:43)
    • 25:51:完成任务A并将其从队列中删除
    • 25:57:租赁下一个任务(获取任务B,ETA = 32:27)
    • 27:16:完成任务B并将其从队列中删除
    • 27:20:租赁下一个任务(再次获得任务A!

0 个答案:

没有答案