【发布时间】:2018-06-05 12:48:41
【问题描述】:
我正在处理一个 超过 500 万个 + 项目的查询集(出于批量 ML 的目的),我需要拆分查询集(这样我就可以执行多线程操作) 无需评估查询集,因为我只需要访问查询集中的每个项目一次,因此我不想缓存评估导致的查询集项目。
是否可以将项目选择到一个查询集中并在不评估的情况下对其进行拆分?还是我必须通过使用 Limits [:size] 查询多个查询集来实现这种行为?
注意: 我知道 Iterable 可用于循环遍历查询集而不对其进行评估,但我的问题与如何拆分查询集(如果可能)然后运行可在每个拆分的查询集上迭代。
【问题讨论】:
-
你能遍历它并让工作线程获取工作吗?这是我可以想象它通过 Django 处理单个查询的唯一方法。 (几乎只是传递一个线程安全的迭代器。)
-
一个 django 查询在遇到强制评估之前不会被评估。而且可以切片。所以 myQuery[1000: 11000] 会非常干净地为您提供查询的一部分。不,它不会评估整个事情以获得该切片。
标签: python django performance django-models django-queryset