Возможно ли в python (возможно, с помощью dask, может быть, с помощью многопроцессорной обработки) "разместить" генераторы на ядрах, а затем, параллельно, пройтись по генераторам и обработать результаты?
Это должны быть генераторы в частности (или объекты с __iter__
); списки всех найденных элементов, которые генерируют генераторы, не помещаются в память.
В частности:
С пандами я могу вызвать read_csv(...iterator=True)
, что дает мне итератор (TextFileReader) - я могу for in
это или явно вызвать следующий несколько раз. Весь CSV никогда не будет прочитан в память. Ницца.
Каждый раз, когда я читаю следующий фрагмент из итератора, я также выполняю некоторые дорогостоящие вычисления для него.
Но теперь у меня есть 2 таких файла. Я хотел бы создать 2 таких генератора и «разместить» 1 на одном ядре и 1 на другом, чтобы я мог:
result = expensive_process(next(iterator))
на каждом ядре, параллельно, а затем объединить и вернуть результат. Повторяйте этот шаг до тех пор, пока один или оба генератора не выйдут из строя.
Похоже, что TextFileReader не может быть рассортирован и не является генератором. Я не могу узнать, как это сделать в dask или многопроцессорной. Есть шаблон для этого?