私はこれを行うための簡単なヘルパーを書いています。これは、batch_size、クエリのオブジェクトクラス、およびクエリの要素を処理するコールバックで呼び出すことができます。
(注、私はdjangoappengineので、Djangoのクエリ形式を使用しています - しかし、あなたが合うように、それを変更することができます。)(カウント)と明示的に残りをうまくする必要が
def loop_over_objects_in_batches(batch_size, object_class, callback):
logging.info("Calling batched loop with batch_size: %d, object_class: %s, callback: %s" % (batch_size, object_class, callback))
num_els = object_class.objects.all().count()
num_loops = num_els/batch_size
remainder = num_els - num_loops * batch_size
offset = 0
while offset < num_loops * batch_size:
logging.info("Processing batch (%d:%d)" % (offset, offset+batch_size))
query = object_class.objects.all()[offset:offset + batch_size]
for q in query:
callback(q)
offset = offset + batch_size
if remainder:
logging.info("Processing remainder batch (%d:-)" % offset)
query = object_class.objects.all()[offset:]
for q in query:
callback(q)
ありませんでした - [: ]スライスは残りのクエリを返します。ループ内でそれを検出して、それを突き止めることができます。私はこれを明確に書いて、私がやっていることを明確にしています。 –