如何减少任务队列中的数据拆分,Google应用程序引擎与Python

如何减少任务队列中的数据拆分,Google应用程序引擎与Python,python,google-app-engine,task-queue,Python,Google App Engine,Task Queue,遇到错误“RequestTooLargeError:对API调用数据存储的请求_v3.Put()太大。” 在查看代码之后,它发生在它使用任务队列的地方 那么,如何将一个大型队列任务拆分为几个较小的任务呢?检查发送到任务队列的有效负载(参数)的大小 如果大小超过几KB,则需要将其存储在数据存储中,并将保存数据的对象的密钥发送到任务队列任务的最大大小为100KB。这是大量的数据。在不查看代码的情况下很难给出具体的建议,但我要提到: 如果在循环中传递要在任务中处理的集合,那么显而易见的解决方案是将整个

遇到错误“RequestTooLargeError:对API调用数据存储的请求_v3.Put()太大。”

在查看代码之后,它发生在它使用任务队列的地方


那么,如何将一个大型队列任务拆分为几个较小的任务呢?

检查发送到任务队列的有效负载(参数)的大小


如果大小超过几KB,则需要将其存储在数据存储中,并将保存数据的对象的密钥发送到任务队列

任务的最大大小为100KB。这是大量的数据。在不查看代码的情况下很难给出具体的建议,但我要提到:

  • 如果在循环中传递要在任务中处理的集合,那么显而易见的解决方案是将整个集合拆分为更小的块,例如,不是将1000个实体传递给一个任务,而是将100个实体传递给10个任务

  • 如果将集合传递给无法拆分为块的任务(例如,需要计算总计、平均值等),则不要传递此集合,而是在任务本身中查询/检索它。每个任务都会保存回数据存储,因此,将集合传递给任务不会带来太多好处—无论如何,它都必须从数据存储中检索

  • 如果将非常大的对象传递给任务,则只传递任务实际需要的数据。例如,如果您的任务发送电子邮件,您可能希望传递电子邮件、名称和消息,而不是传递可能包含许多其他属性的整个用户实体


  • 同样,100KB是大量的数据。如果您没有使用循环来处理任务中的许多实体,那么任务队列的问题可能表明,如果您每次都要推送这么多数据,那么您的数据模型通常存在更大的问题。您可能想考虑将大型实体分割成几个较小的实体。< / P>我如何检查它的大小?我不想为此创建数据存储。我是否可以将数据拆分为较小的数据,然后发送到队列进行处理?您可以检查数据的大小,因为是您创建了数据并将其传递给了任务!如果您想在任务之间分割数据,那么您也可以这样做,前提是处理任务的东西可以处理这个问题@正如您从错误消息中看到的,您正在以任何方式使用数据存储。避免它没有多大意义。当然,你可以将你的工作分成两个较小的工作,但是你不能将一个工作的有效负载分开。这类似于将HTTP POST请求拆分为多个请求。