Оптимизация objects.all() для огромной БД. Как получить все и не зависнуть на N минут?
При итерировании кверисет целиком загружается в память, отсюда и проблема. Решение, которое предложил Александр Втюрин, хоть и несколько топорное, будет работать: идея там верная. Несколько лет тому эта проблема стояла очень остро, поэтому даже появился широко известный в узких кругах Сниппет #1949, сделанный именно на этом принципе.
Но начиная с Django версии, если не ошибаюсь, 1.4, появилось штатное средство, предназначенное для аналогичных целей — метод iterator() у кверисета.
есть подозрение, что дело не в .all(), а в doSomething(3кк раз залезть в инет и сохранить что-то в базу). для проверки можете выполнить такой код:for i, item in enumerate(Item.objects.all()):
    x = i + i
если проблема не в .all(), то должно отработать довольно быстро. В этом случае займитесь оптимизацией doSomething, посмотрите в сторону celery, для джанги небось и батарейки есть, nope, уже из коробки поддерживается.