gpt4 book ai didi

python - Google App Engine - 任务队列 - 如何在满足条件时运行任务

转载 作者:行者123 更新时间:2023-11-30 22:06:30 25 4
gpt4 key购买 nike

我有简单的Python代码,可以在Google应用程序引擎中创建和处理推送队列。

要创建我使用的任务:

 taskqueue.Queue(MY_QUEUE_NAME).add(taskqueue.Task(url=MY_URL,params=MY_PARAMS))

处理我使用的任务:

class QueueHandler(webapp2.RequestHandler):
def post(self):
params = self.request.get('params')
MY_FUNCION(params)

这很好用,但只有满足条件时我才需要运行我的函数!我想做这样的事情:

class QueueHandler(webapp2.RequestHandler):
def post(self):
params = self.request.get('params')
if IS_RAINING:
MY_FUNCION(params)
ELSE:
RETRY_ANOTHER_TIME

现在我使用的是这个,而不是 RETRY_ANOTHER_TIME:

raise ValueError("not_raining")

但我知道这是一个非常糟糕的方法。

我还想象我可以使用 RETRY_ANOTHER_TIME 来代替:

taskqueue.Queue(MY_QUEUE_NAME).add(taskqueue.Task(url=MY_URL,params=MY_PARAMS))

创建另一个任务来尝试相同的事情,但这对我来说很慢而且很糟糕,考虑到这种方式我可以创建许多重复的无用任务。

最佳答案

您实际上没有其他显着不同的替代方案。

无法有条件地执行任务,仅由任务的 ETA 触发执行。因此,您唯一的选择是检查任务本身内部的条件 - 就像您现在所做的那样 - 并执行或不执行该工作。但那时任务已经在运行了。

一旦计划运行任务,它就是:

  • 成功(如果处理程序返回 200 到 299 之间的代码)并从队列中取出。将任务保留在队列中至 RETRY_ANOTHER_TIME 的唯一方法是将另一个任务放入队列(如果需要,可以是其自身的克隆) - 您的第二个建议
  • 失败,在这种情况下,它会保留在队列中,并且 retried ,而是根据任务重试策略配置,默认是逐步退避方案。这实际上就是您引发 ValueError 异常时所做的事情。也许一个更安静/稍微优雅的解决方案是简单地返回 200-299“OK”范围之外的代码,并根据您的需要调整重试策略。

我喜欢第一种方法 - 只要您需要“如果 IS_RAINING 则执行 MY_FUNCION”,就继续排队和消耗任务。它们很轻。

如果您几乎所有时间都需要“execute MY_FUNCION if IS_RAINING”并且IS_RAINING检查之间的间隔超过1分钟,您可以获得当前的参数以其他方式传递给任务,使用 cron 作业而不是推送队列可能会更方便。很多如果。

关于python - Google App Engine - 任务队列 - 如何在满足条件时运行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52701078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com