Python itertools.combination () проблемы с памятью - PullRequest
1 голос
/ 24 ноября 2011

Я обрабатываю огромное количество комбинаций предметов (из League of Legends), около 72 миллионов, все из которых передаются в функцию, которая вычисляет, насколько они полезны.

Мы пытаемсячтобы найти наилучшую возможную комбинацию.

Не обращая внимания на тот факт, что могут быть более эффективные алгоритмические способы сделать это, кто-нибудь может сказать мне, почему я получаю ошибку памяти?1007 * calcStats ничего не делает, кроме арифметики с использованием локальных переменных.

Это быстро израсходует 2 ГБ + памяти и завершится примерно через 5 минут.Я думал, что itertools должен был обеспечить генератор, который не использовал бы тонну памяти?Я даже добавил это утверждение gc.collect (), но, похоже, оно не работает.Есть идеи?

1 Ответ

0 голосов
/ 24 ноября 2011

Комбинации создают пул, потребляя весь предоставленный итератор. Обойти это невозможно. См. Псевдокод в документации для функции: http://docs.python.org/library/itertools.html#itertools.combinations

...