Мазмунга өтүү

Өндүрүмдүүлүк жана профилдөө

Сабактын башталышы

Өндүрүмдүүлүк жана профилдөө

Адегенде өлчө, тар жерди оптималдаштыр, анан кайра өлчө

Негизги идея: Ыкчам код божомол менен жазылбайт. Убакыт чын эле кайда кетээрин timeit жана cProfile сыяктуу куралдар менен өлчөйсүз, наркы кириш маалыматтын өлчөмү (big-O) менен кандай өсөрүн ойлонуп, андан кийин гана дал ошол маанилүү бөлүктү өзгөртөсүз — көбүнчө жакшыраак алгоритмди же маалымат структурасын тандап, кайталанган ишти кэштеп же тыгыз циклдерди векторлоштурулган операцияларга которуп. Калган кодду түшүнүктүү жана жөнөкөй калтырыңыз.
Аягында сиз төмөнкүлөрдү жасай аласыз:
  • кичине үзүндүнү timeit менен туура өлчөп, анын кеңири таралган тузактарынан качуу,
  • бүтүн программаны cProfile менен профилдеп, pstats отчётун окуу,
  • big-O өсүшүн окуп, аны реалдуу убакыт менен байланыштыруу,
  • O(n) мүчөлүк текшерүүсүн set/dict аркылуу O(1) кылып алмаштыруу,
  • кайталанган ишти functools.lru_cache менен кэштөө,
  • ысык циклди кол менен жазуунун ордуна качан векторлоштуруу керектигин түшүнүү.

1. Божомолдобо, өлчө

Өндүрүмдүүлүк боюнча иштин биринчи эрежеси: "эмне жай" деген программисттин интуициясы адатта туура эмес. Интерпретатор, операциялык система, эстутум кэштери жана китепканалардын ичи кодду окуу менен алдын ала айтуу кыйын болгондой аракеттешет. Ошондуктан кесипкөй цикл мындай: өлчө -> тар жерди тап -> бир нерсени өзгөрт -> кайра өлчө.

Байланыштуу эреже: маанилүү нерсени гана оптималдаштыр. Ишке киргенде бир жолу аткарылган функция циклдин ичинде он миллион жолу чакырылган функциянын көңүлүн талап кылбайт. Дональд Кнуттун атактуу сөзү — "эрте оптималдаштыруу — бардык жамандыктын тамыры" — чындыгында күчтү актабаган жерге сарптабоо жөнүндө. Түшүнүктүү код — бул стандарт; тактыкты ылдамдыкка далилденген тар жерде гана алмаштырасыз.

Өлчөөнүн эки түрү эки башка суроого жооп берет. Микробенчмарк (timeit) "бул эки кичине үзүндүнүн кайсынысы ыкчам?" деген суроого жооп берет. Профилдөөчү (cProfile) "бул бүтүн программада убакыт чын эле кайда кетет?" деген суроого жооп берет. Ылайыктуусун тандаңыз.

Бул сабакты YourAIZone платформасында улантыңыз

Толук сабакта — толук түшүндүрмө, чыгарылган мисалдар, көп кездешкен каталар, заматта текшерилүүчү тесттер жана ЖИ-репетитор. Конок катары дароо баштаңыз же прогрессти сактоо үчүн аккаунт түзүңүз.

Толук сабакта

  • Толук түшүндүрмө
  • Чыгарылган мисалдар
  • Көп кездешкен каталар жана алардан кантип качуу керек
  • Тест суроолору: 15
  • Тема боюнча суроолорго жооп берген ЖИ-репетитор
  • Окуучу, ата-эне жана мугалим үчүн прогрессти көзөмөлдөө