diff --git "a/\320\243\321\200\320\276\320\272 6. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" "b/\320\243\321\200\320\276\320\272 6. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" index 4bfb8a82..ce2a5a9b 100644 --- "a/\320\243\321\200\320\276\320\272 6. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" +++ "b/\320\243\321\200\320\276\320\272 6. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" @@ -1,15 +1,167 @@ -""" -Задание 1. -Выполните профилирование памяти в скриптах -Проанализировать результат и определить программы с -наиболее эффективным использованием памяти. - -Примечание: Для анализа возьмите любые 1-3 ваших программы или несколько -вариантов кода для одной и той же задачи. Можно взять задачи с курса Основ или с текущего курса Алгоритмов - -Результаты анализа вставьте в виде комментариев к коду. -Также укажите в комментариях версию Python и разрядность вашей ОС. - -ВНИМАНИЕ: ЗАДАНИЯ, В КОТОРЫХ БУДУТ ГОЛЫЕ ЦИФРЫ ЗАМЕРОВ (БЕЗ АНАЛИТИКИ) -БУДУТ ПРИНИМАТЬСЯ С ОЦЕНКОЙ УДОВЛЕТВОРИТЕЛЬНО -""" +""" +Задание 1. + +Выполните профилирование памяти в скриптах +Проанализировать результат и определить программы с +наиболее эффективным использованием памяти. + +Примечание: Для анализа возьмите любые 3-5 ваших РАЗНЫХ скриптов! +(хотя бы 3 разных для получения оценки отл). +На каждый скрипт вы должны сделать как минимум по две реализации. + +Можно взять задачи с курса Основ +или с текущего курса Алгоритмов + +Результаты профилирования добавьте в виде комментариев к коду. +Обязательно сделайте аналитику (что с памятью в ваших скриптах, в чем ваша оптимизация и т.д.) + +ВНИМАНИЕ: ЗАДАНИЯ, В КОТОРЫХ БУДУТ ГОЛЫЕ ЦИФРЫ ЗАМЕРОВ (БЕЗ АНАЛИТИКИ) +БУДУТ ПРИНИМАТЬСЯ С ОЦЕНКОЙ УДОВЛЕТВОРИТЕЛЬНО + +Попытайтесь дополнительно свой декоратор используя ф-цию memory_usage из memory_profiler +С одновременным замером времени (timeit.default_timer())! +""" +from random import randint, random +from timememit import timememit +from pympler.asizeof import asizeof +from recordclass import recordclass +from datetime import datetime, timedelta +import numpy as np +import json +import msgpack +import sys + + +args = iter(sys.argv) +next(args) +ARG1 = next(args, None) +NOW = datetime.now() +LETRANGE = (ord('A'), ord('Z')) + +# Будем применять способы оптимизации памяти, рассмотренные на уроке + +# 1. Ленивые вычисления +# пример в файле task_3a.py + +# 2. Слоты в ООП +# 3. numpy (также пример в файле task_2.py) +# 4. recordclass + + +# Пусть у нас есть список чего-либо, допустим, биржевой торговли +def gen_transaction(): + return ( + # ticker + ''.join(chr(randint(*LETRANGE)) for _ in range(4)), + # number + randint(1, 1000), + # seller_id + randint(1, 10000000), + # buyer_id + randint(1, 10000000), + # price + randint(1, 10000000), + # timestamp + NOW + timedelta(seconds=randint(0, 100000)) + ) + + +class Transaction: + def __init__(self, ticker, number, seller, buyer, price, timestamp): + self.ticker = ticker + self.number = number + self.seller = seller + self.byer = buyer + self.price = price + self.timestamp = timestamp + + +class TransSlots: + __slots__ = ['ticker', 'number', 'seller', 'buyer', 'price', 'timestamp'] + + def __init__(self, ticker, number, seller, buyer, price, timestamp): + self.ticker = ticker + self.number = number + self.seller = seller + self.buyer = buyer + self.price = price + self.timestamp = timestamp + + +TransRecord = recordclass( + 'TransRecord', + 'ticker number seller buyer price timestamp') + +trans_dtype = [ + ('ticks', '