Конкуренттүүлүк: агымдар жана GIL
Убакытта кайчылашкан ишти агымдар менен аткарыңыз, GIL аларды эмне үчүн чектээрин түшүнүңүз жана жалпы абалды кулпулар менен туура кармаңыз
Lock менен сериялаштырышыңыз керек, антпесе жарыш абалын аласыз.
- конкуренттүүлүктү параллелизмден ажырата аласыз,
threadingмодулу менен агымдарды баштайсыз жана кошосуз,- GIL эмнени кепилдеп, эмнеге турарын түшүндүрөсүз,
- агымдар качан жардам берерин (I/O-bound), качан бербесин (CPU-bound) чечесиз,
- жарыш абалын байкап, аны
Lockжеwith lock:менен оңдойсуз, - агымдарды кол менен башкаруунун ордуна
ThreadPoolExecutorжанаqueue.Queueколдоносуз.
1. Конкуренттүүлүк параллелизм эмес
Конкуренттүүлүк бул программаны бир нече тапшырма бир убакта процессте болгондой куруу ыкмасы — аларды бир өзөктө кезектешип аткарууга болот, ар бири кезек менен бир аз алдыга жылат. Параллелизм бул тапшырмалар так бир учурда бир нече өзөктө аткарылганда. Конкуренттүүлүк көп нерсе менен күрөшүү жөнүндө; параллелизм көп нерсени бир убакта жасоо жөнүндө. CPython'догу агымдар конкуренттүүлүк берет; GIL себебинен алар таза Python CPU иши үчүн параллелизмди сейрек берет.
Бул айырма бүт теманын ачкычы. Агымдар программага көп нерсени бир убакта күтүүгө мүмкүндүк берет — жыйырма ачык сокет, он файл, беш HTTP суроо — ошентип жалпы саат убактысы бардыгынын суммасына эмес, эң узак жалгыз күтүүгө жакындайт. Алар жасай албаган нерсе — бир CPU оор Python циклин тезирээк бүтүрүү.