Буферизация. Когда эффективно выбрать данные в больших блоках, но обработать его в маленьких блоках, тогда генератор мог бы помочь:
def bufferedFetch():
while True:
buffer = getBigChunkOfData()
# insert some code to break on 'end of data'
for i in buffer:
yield i
Вышеупомянутое позволяет Вам легко разделить буферизацию от обработки. Потребительская функция может теперь просто получить значения один за другим, не вызывая беспокойство о буферизации.
SELECT id FROM a -- returns 1,4,2,3
UNION
SELECT id FROM b -- returns 2,1
order by 2,1