Python 任务扇出-如何将任务批量添加到队列-超过5个

Python 任务扇出-如何将任务批量添加到队列-超过5个,python,google-app-engine,task-queue,Python,Google App Engine,Task Queue,我正在使用一个任务(排队任务)来排队多个其他任务-扇出。当我尝试使用with task参数作为一个包含超过5个元素的实例列表,并在事务中使用时…我得到了这个错误 JointException: taskqueue.DatastoreError caused by: <class 'google.appengine.api.datastore_errors.BadRequestError'> Too many messages, maximum allowed 5

我正在使用一个任务(排队任务)来排队多个其他任务-扇出。当我尝试使用with task参数作为一个包含超过5个元素的实例列表,并在事务中使用时…我得到了这个错误

JointException: taskqueue.DatastoreError caused by: 
    <class 'google.appengine.api.datastore_errors.BadRequestError'> 
    Too many messages, maximum allowed 5
JointException:taskqueue.DataStore由以下原因导致的错误:
消息太多,最多允许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
    
    以事务方式添加扇出任务可确保其排队。由于已在运行的任务而导致的错误被捕获并忽略,其他错误会导致扇出任务重新运行。使用此模式,您可以非常轻松地插入许多子任务