Skip to content

stas224/vk_education_deep_python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

30 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

vk_education_deep_python

homework for the spring course 2023

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ #01 (Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅, тСстированиС)

1. Ѐункция ΠΎΡ†Π΅Π½ΠΊΠΈ сообщСния

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ predict_message_mood, которая ΠΏΡ€ΠΈΠ½ΠΈΠ°ΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ строку, экзСмпляр ΠΌΠΎΠ΄Π΅Π»ΠΈ SomeModel ΠΈ ΠΏΠΎΡ€ΠΎΠ³ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΡΡ‚ΠΈ. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:

  • "Π½Π΅ΡƒΠ΄", Ссли прСдсказаниС ΠΌΠΎΠ΄Π΅Π»ΠΈ мСньшС bad_threshold
  • "ΠΎΡ‚Π»", Ссли прСдсказаниС ΠΌΠΎΠ΄Π΅Π»ΠΈ большС good_threshold
  • "Π½ΠΎΡ€ΠΌ" Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях

2. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ для чтСния ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°

Π•ΡΡ‚ΡŒ тСкстовый Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС Ρ„Π°ΠΉΠ»Π° Ρ„Ρ€Π°Π·Π° ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅: Π½Π°Π±ΠΎΡ€ слов, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ (Π·Π½Π°ΠΊΠΎΠ² прСпинания Π½Π΅Ρ‚). Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½Π° Π²Ρ…ΠΎΠ΄ имя Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ список слов для поиска. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ строки Ρ„Π°ΠΉΠ»Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΈΠ· Π½ΠΈΡ… (строку Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ), Π³Π΄Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΠ»ΠΎΡΡŒ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎ ΠΈΠ· слов для поиска. Поиск Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ совпадСнию слова Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° рСгистра.

3. ВСсты Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡƒΠ½ΠΊΡ‚Π°

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ #02

1. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ строку json, список ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, список ΠΈΠΌΡ‘Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ срабатываСт, ΠΊΠΎΠ³Π΄Π° Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π΅ Π±Ρ‹Π»ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ имя.

Ѐункция, Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ строку, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТится json, ΠΈ произвСсти парсинг этого json. Упростим Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ прСдставим, Ρ‡Ρ‚ΠΎ json прСдставляСт ΠΈΠ· сСбя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΈ значСниями ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строки.

2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ mock-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈ тСстировании

3. Π£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ покрытия тСстами с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ coverage

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ #03 (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль, ООП)

1. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс CustomList наслСдованиСм ΠΎΡ‚ list

ΠŸΡ€ΠΈ этом:

  • CustomList Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ встроСнного списка list;
  • экзСмпляры CustomList ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ списками:
  • экзСмпляры CustomList ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ списками:
  • Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ слоТСния/вычитания Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ кастомный список;
  • ΠΏΡ€ΠΈ слоТСнии/Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠΈ списков Ρ€Π°Π·Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты мСньшСго списка ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ нулями;
  • ΠΏΡ€ΠΈ сравнСнии (==, !=, >, >=, <, <=) экзСммпляров CustomList Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ сумма элСмСнтов списков (сравнСниС с list Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ);
  • Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ str, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ элСмСнты списка ΠΈ ΠΈΡ… сумма;
  • списки ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ всСгда числовыми.

2. ВСсты CustomList Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ #04 (дСскрипторы, мСтаклассы, ABC)

1. ΠœΠ΅Ρ‚Π°ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π½Π°Ρ‡Π°Π»Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠΉ всСх Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΡ€ΠΎΠΌΠ΅ магичСских, добавляСт прСфикс "custom_"

ΠŸΠΎΠ΄ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ класса ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ экзСмпляра класса, Π² Ρ‚ΠΎΠΌ числС Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ послС выполнСния конструктора.

2. ДСскрипторы с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ…

НуТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ дСскриптора для ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ области интСрСса.

3. ВСсты мСтакласса ΠΈ дСскрипторов

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ #05 (стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°)

1. LRU-кэш

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² срСднСм Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ константной O(1). РСализация Π»ΡŽΠ±Ρ‹ΠΌ способом Π±Π΅Π· использования OrderedDict.

2. ВСсты Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ #06 (ΠΏΠΎΡ‚ΠΎΠΊΠΈ, процСссы)

1. ΠšΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для ΠΎΠ±ΠΊΠ°Ρ‡ΠΊΠΈ Π½Π°Π±ΠΎΡ€Π° ΡƒΡ€Π»ΠΎΠ²

CΠ΅Ρ€Π²Π΅Ρ€

master-worker cΠ΅Ρ€Π²Π΅Ρ€ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запросов ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Алгоритм Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

  • ΠœΠ°ΡΡ‚Π΅Ρ€ ΠΈ Π²ΠΎΡ€ΠΊΠ΅Ρ€Ρ‹ это Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ;
  • ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ² задаСтся ΠΏΡ€ΠΈ запускС;
  • ΠœΠ°ΡΡ‚Π΅Ρ€ ΡΠ»ΡƒΡˆΠ°Π΅Ρ‚ ΠΏΠΎΡ€Ρ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎ TCP ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΡƒΡ€Π»Ρ‹ для ΠΎΠ±ΠΊΠ°Ρ‡ΠΊΠΈ;
  • ΠœΠ°ΡΡ‚Π΅Ρ€ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π°ΠΏΡ€ΠΎc ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ²;
  • Π’ΠΎΡ€ΠΊΠ΅Ρ€ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ url ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°;
  • Π’ΠΎΡ€ΠΊΠ΅Ρ€ ΠΎΠ±ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ url ΠΏΠΎ http ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Ρ‚ΠΎΠΏ K самых частых слов ΠΈ ΠΈΡ… частоту Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ json {"word1": 10, "word2": 5};
  • ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΡ€Π»Π° сСрвСр Π΄ΠΎΠ»ΠΆΠ΅Π½ вывСсти статистику: сколько ΡƒΡ€Π»ΠΎΠ² Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ суммарно всСми Π²ΠΎΡ€ΠΊΠ΅Ρ€Π°ΠΌΠΈ;

python server.py -w 10 -k 7 (сСрвСр ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ 10 Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ² для ΠΎΠ±ΠΊΠ°Ρ‡ΠΊΠΈ ΠΈ отправляСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Ρ‚ΠΎΠΏ-7 частых слов)

ΠšΠ»ΠΈΠ΅Π½Ρ‚

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π°, ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ запросы с ΡƒΡ€Π»Π°ΠΌΠΈ сСрвСру ΠΏΠΎ TCP Π² нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². НуТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  • ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» с запросами (порядка 100 Ρ€Π°Π·Π½Ρ‹Ρ… url);
  • На Π²Ρ…ΠΎΠ΄ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ пСрСдаётся Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° --- Ρ„Π°ΠΉΠ» с URL'Π°ΠΌΠΈ ΠΈ M (количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²);
  • ΠšΠ»ΠΈΠ΅Π½Ρ‚ создаСт M ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², отправляСт запросы Π½Π° сСрвСр Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ сСрвСра Π² стандартый Π²Ρ‹Π²ΠΎΠ΄, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: xxx.com: {'word1': 100, 'word2': 50}.

python client.py 10 urls.txt.

ВсС дСйствия Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ Π² классы/Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

2. ВСсты Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ #07 (async)

1. Π‘ΠΊΡ€ΠΈΠΏΡ‚ для асинхронной ΠΎΠ±ΠΊΠ°Ρ‡ΠΊΠΈ ΡƒΡ€Π»ΠΎΠ²

ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ скрипт для ΠΎΠ±ΠΊΠ°Ρ‡ΠΊΠΈ списка ΡƒΡ€Π»ΠΎΠ² с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ количСство ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… запросов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ асинхронноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ· aiohttp.

2. ВСсты Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ #08 (ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅)

1. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ использования weakref ΠΈ слотов

НуТно ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ свои Ρ‚ΠΈΠΏΡ‹ с нСсколькими Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ:

  • класс с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ
  • класс со слотами
  • класс с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ weakref Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса создаСтся большоС число экзСмпляров ΠΈ замСряСтся (сравниваСтся):
  • врСмя создания ΠΏΠ°Ρ‡ΠΊΠΈ экзСмпляров
  • врСмя чтСния/измСнСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π·Π°ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΡ„ΠΎΡ€ΠΌΠ»ΡΡŽΡ‚ΡΡ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π°ΠΌΠΈ c описаниСм ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ.

2. ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΡ€ΠΎΠ²Π΅ΡΡ‚ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ памяти для ΠΊΠΎΠ΄Π° ΠΈΠ· ΠΏΡƒΠ½ΠΊΡ‚Π° 1. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΎΡ„ΠΎΡ€ΠΌΠ»ΡΡŽΡ‚ΡΡ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π°ΠΌΠΈ c описаниСм.

3. Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ для профилирования

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€oΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (cProfile) всСх Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .print_stat() Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Π΄ΠΈΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ со статистикой профилирования суммарно ΠΏΠΎ всСм Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ #09 (Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅)

1. Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ LRUCache

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π°Π·Π½ΠΎΠ³ΠΎ уровня Π² Ρ„Π°ΠΉΠ» cache.log для LRUCache.

  • По Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки "-s" Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² stdout с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.
  • По Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки "-f" Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ кастомный Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ записи c Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌ числом слов ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ своС.
  • "-s" ΠΈ "-f" ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ запускС ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ вмСстС Π² Ρ‚Π°ΠΊΠΎΠΌ случаС.

Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ случаи:

  • get ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π°
  • get ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π°
  • set ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π°
  • set ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π°, ΠΊΠΎΠ³Π΄Π° достигнута Ρ‘ΠΌΠΊΠΎΡΡ‚ΡŒ
  • set ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π°
  • Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ debug записи Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ Π² зависимости ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠŸΡ€ΠΈ запускС модуля Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ всС пСрСчислСнныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с кэшом (Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² if __name__ == "__main__").

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ #10 (Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½Π° C)

1. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для парсинга ΠΈ сСриализации json (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ C API)

  • НуТно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ cjson, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π» Π±Ρ‹ хотя Π±Ρ‹ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: loads ΠΈ dumps;
  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρƒ loads Π½Π° Π²Ρ…ΠΎΠ΄ подаётся строка Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ:
    • JSON-сообщСниС Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Ρ‡ΠΈΡ‚Π°ΠΉ ΠΊΠ°ΠΊ python-ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ);
    • ΠšΠ»ΡŽΡ‡Ρ‘ΠΌ Π² JSON всСгда являСтся строка Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…;
    • Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ число, Π»ΠΈΠ±ΠΎ строка. Если Π·Π°Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²;
    • Если входная строка Π½Π΅ являСтся JSON-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
    • Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° dict.
  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρƒ dumps Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° пСрСдаётся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° dict ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΊΠ°ΠΊ Ρƒ loads Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚;

2. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ Makefile

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ make происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  • Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΏΠΊΡƒ venv с установкой всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ;
  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ установка модуля (выполнялся Π±Ρ‹ setup.py install);
  • Π”ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»ΡŒ test, которая запустит тСсты (ΠΏΠ΅Ρ€Π΅Π΄ запуском Ρ†Π΅Π»ΠΈ test всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° make).

3. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ тСсты

НуТно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ тСсты коррСктности Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² loads ΠΈ dumps Π½Π° языкС Python, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ парсинга ΠΈ Π΄Π°ΠΌΠΏΠ° (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ unittest);

4. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ тСст ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ своСй Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с json ΠΈ ujson Π½Π° ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π”Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ большиС (ΠΊΠ°ΠΊ количСство JSON, Ρ‚Π°ΠΊ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ JSON).

Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅: Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ тСстов Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 100 мс.

About

homework for the spring course 2023

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published