Python: преобразовать большой список в генератор? - PullRequest
0 голосов
/ 23 марта 2020

У меня уже есть переменная типа списка python, которая содержит 6000000 записей, для которых тип данных записи равен python словарь.

a = [{'a': .... }, {'a': ...} , ...]

Поскольку он занимает слишком много памяти, поэтому я бы хотел преобразовать его в генератор или что-то в этом роде.

Проблема в том, что переменная списка является возвращаемым значением многопроцессорной обработки Pool, поэтому я не могу создать генератор раньше.

Любые советы

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Вы можете использовать Pool.imap, чтобы вычислить результаты лениво. Это предотвратит создание одного большого списка, но вместо этого вы можете перебирать результаты по частям, предоставляя параметр chunksize:

results_generator = pool.imap(func, input_data, 64)  # chunks of 64
0 голосов
/ 23 марта 2020

Если у вас уже есть это в памяти, преобразование его в generator не решит проблему. Вам нужно было бы сделать generator, который бы загружал записи с диска на лету, таким образом не загружая все записи в память одновременно. Здесь - хорошая статья об использовании generators в Python для обработки ограничений памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...