1
我正在生成客戶端的批次電話號碼。我有一大堆(25m +)的Subscriber對象表,我正在尋找匹配的記錄,然後通過Django的ForeignKey關係查找每個對象的數字(Subscriber對象具有Customer對象的ForeignKey,然後有一個包含數字的CharField)。對於大型查詢集,我在批次中獲取重複的數字。在約11萬用戶列表中,我獲得了大約5k個副本。批量處理大型Django查詢集時重複值
我生成具有簡單明瞭濾波器的初始查詢集:
subscribers = Subscribers.objects.filter(foo='bar')
這是如何我然後生成批次:
batches = [
[s.customer.number for s in subscribers[x:x + batch_size]]
for x in xrange(0, subscriber_count, batch_size)
]
當我測試在殼該方法中,它的工作原理正好;只有在生產中它纔會失敗。它也適用於生產中較小的QuerySet。只有QueryKets約50k +似乎有問題。此外,當我嘗試只創建一個從QuerySet的認購對象的列表,一切都很正常:
print list(subscribers)
正常工作,即使是在生產。因此,它似乎像
s.customer.number
以某種方式做查找錯誤的偶然,但僅適用於大型查詢集。
這工作。我很好奇爲什麼Django無法處理正常查找,但只要它正常工作。 另外,我不需要.distinct()調用。沒有這個,它工作得很好。 – user1706411