编程语言
首页 > 编程语言> > python – 任务扇出 – 如何批量添加任务到队列 – 超过5

python – 任务扇出 – 如何批量添加任务到队列 – 超过5

作者:互联网

我正在使用一个任务(排队任务)来排队多个其他任务 – 扇出.当我尝试使用Queue.add,任务参数是一个包含超过5个元素的Task个实例的列表并且在事务中……我得到了这个错误.

JointException: taskqueue.DatastoreError caused by: 
    <class 'google.appengine.api.datastore_errors.BadRequestError'> 
    Too many messages, maximum allowed 5

还有另一种方法可以在事务中排队超过5个任务吗?

要么…

也许我不需要交易,原因是:

>我不在乎这些任务是否排队等候两次,并且
>如果任何队列排队失败,那么整个排队任务将重新运行.

那么告诉我如何在一个事务中排队超过5个任务或告诉我不使用事务因为我真的不需要.

解决方法:

解决问题的一个解决方案是添加一个事务任务,将剩余的任务分散出来.只需在现有交易中添加一个扇出任务即可.

除非存在业务逻辑原因,否则不要重新运行已经运行的任务.防止重新插入(即复制)任务非常简单并节省资源.您的扇出任务基本上如下:

class FanOutTask(webapp.RequestHandler):
  def get(self):
    name = self.request.get('name')
    params = deserialize(self.request.get('params'))

    try:
      task_params = params.get('stuff')
      taskqueue.add(url='/worker/1', name=name + '-1', params=task_params)
    except TaskAlreadyExistsError:
      pass

    try:
      task_params = params.get('more')
      taskqueue.add(url='/worker/2', name=name + '-2', params=task_params)
    except TaskAlreadyExistsError:
      pass

以事务方式添加扇出任务可确保将其排入队列.由于已经运行的任务导致的错误被捕获并被忽略,其他错误导致扇出任务重新运行.使用此模式,您可以非常轻松地插入许多子任务.

标签:python,google-app-engine,task-queue
来源: https://codeday.me/bug/20190705/1383464.html