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

Параллелдик: Көп процесстүүлүк

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

Параллелдик: Көп процесстүүлүк

Чыныгы өзүнчө Python процесстерин иштетип, процессордун бардык ядролорун колдонуңуз

Негизги идея: multiprocessing модулу кодуңузду операциялык системанын өзүнчө процесстеринде иштетет; алардын ар биринин өзүнчө Python интерпретатору жана өзүнчө глобалдык интерпретатор кулпусу (GIL) бар. Бул CPU-bound (эсептөөгө оор) Python кодун бир эле убакта көп ядрого иштетүүнүн бирден-бир ишенимдүү жолу. Анын баасы — процесстер эстутумду бөлүшпөгөндүктөн, ар бир аргумент жана ар бир натыйжа сериализацияланып (pickle) процесстин чегинен өткөрүлүшү керек.
Сабактын аягында сиз:
  • эсептөө иши үчүн GIL эмне үчүн процесстерди (агымдарды эмес) колдонууга мажбурлаарын түшүндүрө аласыз,
  • иштерди Process, Pool жана ProcessPoolExecutor аркылуу баштай аласыз,
  • map, imap жана apply_async ортосунан тандап, ылайыктуу chunksize тандай аласыз,
  • маалыматты Queue, Pipe жана shared_memory менен жылдыра аласыз,
  • классикалык тузактардан качасыз: if __name__ == "__main__" коргоосу, сериализацияланбас аргументтер жана баштоо методдору (spawn жана fork).

1. GIL жана эмне үчүн агымдар эсептөөгө жардам бербейт

CPython өзүнүн ички абалын глобалдык интерпретатор кулпусу (GIL) менен коргойт: каалаган учурда Python байт-кодун бир гана агым аткара алат. I/O-bound иш үчүн (тармакты, дискти же маалымат базасын күтүү) агымдар эң сонун, анткени агым күткөндө GIL бошотулат. Бирок CPU-bound иш үчүн (эсептөө, талдоо, кысуу, сүрөт иштетүү) агымдар бир ядрого кезектешип, эч кандай ылдамдоо бербейт.

Көп процесстүүлүк GIL'ди толугу менен айланып өтөт. Ар бир бала процесс — өзүнүн GIL'и бар өзүнчө Python интерпретатору, ошондуктан N процесс чындап эле Python байт-кодун N ядрого бир убакта аткара алат.

Иштин түрүМыкты куралЭмне үчүн
I/O-bound (сурамдар, файлдар, БД)threading / asyncioкүткөндө GIL бошотулат; кошумча процесстер керек эмес
CPU-bound (математика, талдоо, кодтоо)multiprocessingжалгыз GIL тоскоолдугун өзүнчө процесстер гана айланып өтөт

Эреже: код эсептөө менен алек болсо — процесстерди алыңыз. Күтүү менен алек болсо — агымдарды же async'ти алыңыз.

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

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

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

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