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

How to decrease to split data put in task queue, Google app engine with Python

遇到错误"RequestTooLargeError: The request to API call datastore_v3.Put() was too large."。

看了代码,发现是在使用任务队列的地方

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

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

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

任务的最大大小为 100KB。这是很多数据。如果不查看您的代码,很难给出具体的建议,但我会提到这一点:

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

  2. 如果你将一个集合传递给一个不能拆分成块的任务(例如你需要计算总计,平均值等),那么不要传递这个集合,但是query/retrieve 它在任务本身。每个任务都保存回数据存储区,因此将集合传递给任务不会有太大好处 - 无论如何都必须从数据存储区中检索它。

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

同样,100KB 的数据量很大。如果您没有使用循环来处理任务中的许多实体,任务队列的问题可能表明如果您每次都必须推送如此多的数据,那么您的数据模型通常会出现更大的问题。您可能需要考虑将巨大的实体拆分为几个较小的实体。