我正在生成一个项目之间相似性的矩阵,以便将其提供给Django中的推荐系统。(一天结束时是n^2。)
我遇到的问题是,无论我是否使用iterator()
,我的内存仍然会被吸住。
我会这样做:
rated_apps_list = Rating.objects.values_list('item_id', flat=True).order_by('-item_id').distinct()
rated_apps_iter = MemorySavingQuerysetIterator(rated_apps_list[start:])
for app_above in rated_apps_iter:
rated_apps_below_iter = MemorySavingQuerysetIterator(rated_apps_list[i+1:])
for app_below in rated_apps_below_iter:
...
其中MemorySavingQuerySetIterator为:
^{pr2}$起初我只尝试使用.iterator()函数,但后来我相信是数据库客户端缓存了结果。 漏洞仍然存在,过了一段时间我必须重新加载脚本。在
我知道创建和元素一样多的迭代器看起来效率不高,因为那样的话,我会把所有的元素都放在内存中,你们会怎么做呢?。在
有什么想法吗?谢谢!在
实际上,你的解决方案几乎可以。建议很少:
deepcopy
queryset,它是在切片时克隆的。在您可以根据您的情况调整this thing。只需使用
item_id
而不是pk
。它使用条件而不是偏移,因此效率更高。在相关问题 更多 >
编程相关推荐