Рубрики
Без рубрики

Ironhack BCN Challenge1, кодовая часть

Небольшой код для обработки идентификаторов клиентов, по крайней мере, 30 миллионов идентификаторов за 75 секунд на Repl.it. Стресс де … Tagged with Repit, Python.

Небольшой код для обработки идентификаторов клиентов, по крайней мере, 30 миллионов идентификаторов за 75 секунд на Repl.it. Подробный тест стресса и профилирование памяти необязательно.

Для развлечения проблема, которую они настаивают на решении на Python. Список, минимум 28 миллионов идентификаторов для периодического обработки. Я начинаю со списка идентификаторов из 14 миллионов манекенов для тестов (поэтому он должен идти мешковатым в случае в облаке 1 ГБ памяти и 1 VCPU, оставшееся хранилище, а не SSD). Поскольку список идентификаторов, которые периодически обновляются, должен быть доступен по другим приложениям, и я не хочу поддаваться пространству и обработке с JSON, я делаю некоторые тесты со смоделированным списком из 14 миллионов идентификаторов с объектами, которые разрешают Дамп/восстановление объектов данных (Pickle, маршал, HDF5 в дереве B).

Пространство, требуемое структурами данных, ясно. Они извлечены с помощью getsizeof () и соответствуют тому, что ожидается в Python, включая накладные расходы. Список 14M ID занимает 107mb, которая составляет 8 байтов на элемент, точно так же, как стресс -тест 18M ID, в котором файл дампа занимает 138mib (144006144 байт). Что больше не ясно, так это то, почему при восстановлении объектов данных память в 5 раз больше, выберите выбранную вами объект. Эволюция памяти описана ниже.

Наконец, я сделал своего собственного совместимого читателя/писателя массивов в Python на диске в качестве двоичного файла. В любом случае, кажется, что он обрабатывает 30 миллионов идентификаторов за 75 секунд, что уже остается для вызова с одним потоком

Это то, что может произойти, когда вы используете инструмент с самоуправленной памятью, в которой существует большое разнообразие пакетов, в которых объект Overh Hard явно приносит в жертву эффективность. Существует дилемма между изменяющимися инструментами или выполнением низкоуровневых операций самостоятельно в некоторой функции, с известными и стабильными затратами в памяти и стабильной. В этом случае мы жертвуем совместимостью в файлах данных чтения/записи данных, в обмен на эффективность во времени и пространстве хранения, без использования сжатия.

Это все.

Оригинал: “https://dev.to/sfrias/ironhack-bcn-challenge1-code-part-j4p”