Utvalda aspekter av samtidighet i Python 3
Av Idego Group

Den här artikeln utforskar koncept för parallell och konkurrent programmering i Python 3.4+ och skiljer mellan konkurrenta program med flera logiska trådar och parallella program som körs samtidigt på flera kärnor.
Processer behåller separata minnesuttrymmen och tolkar, medan trådar delar kontext inom en enskild process. Trådar utmärker sig vid hantering av I/O-operationer genom att tillåta andra uppgifter att köras under väntetider, även om Global Interpreter Lock (GIL) begränsar samtidig körning av Python-bytekod till en tråd.
Det finns flera metoder för samtidighet: den lågnivå-_thread-modulen för direkt trådhantering, threading-modulen med synkroniseringsmekanismer som lås och queue-modulen för säker kommunikation mellan trådar. Lösningar på högre nivå inkluderar concurrent.futures med tråd- och processbassutförare.
Multiprocessing-modulen hanterar CPU-bundna uppgifter med separata processer och externa verktyg som Cythons OpenMP-integration erbjuder ytterligare alternativ. För specialiserade användningsfall möjliggör Parallel Python distribuerad beräkning över nätverksmaskiner.
Python-trådar lämpar sig för I/O-bundet arbete men underpresterar för CPU-intensiva uppgifter på grund av GIL. Processbaserade lösningar kringgår denna begränsning men medför serialiseringskostnad och kräver tillräckligt beräkningsarbete för att motivera kommunikationskostnaderna.