Я только что придумал довольно странный случай использования этого.
Иногда я обнаруживал, что мне нужен маппер, который потребляет все свои входные данные, прежде чем производить какие-либо выходные данные.Я делал это в прошлом, выполняя записи в моей функции очистки.Моя функция карты на самом деле не выводит никаких записей, она просто читает входные данные и сохраняет все, что потребуется в частных структурах.
Оказывается, что этот подход работает нормально, если вы не производите МНОГО выходных данных.Лучшее, что я могу разглядеть, это то, что средство разлива картографа не работает во время очистки.Таким образом, создаваемые записи просто накапливаются в памяти, и если их слишком много, вы рискуете исчерпать кучу.Это мое предположение о том, что происходит - может быть неправильно.Но определенно проблема исчезает с моим новым подходом.
Этот новый подход заключается в переопределении run () вместо cleanup ().Мое единственное изменение в функции run () по умолчанию состоит в том, что после того, как последняя запись была доставлена в map (), я вызываю map () еще раз с нулевым ключом и значением.Это сигнал моей функции map (), чтобы он продолжил и выдал свой вывод.В этом случае, когда утилита по-прежнему работает, использование памяти остается под контролем.