0%

Waar Python niet de eerste keuze is

Pure snelheid en waar het werk gebeurt

“Python is traag.”

Je zult het horen alsof de discussie daarmee klaar is. Dat is niet zo, en niet omdat de uitspraak onwaar is. Gewone Python kan echt veel trager zijn dan talen die de machine directere instructies geven.

Het probleem is dat de uitspraak te vaag is om er een taal mee te kiezen. Een traag onderdeel maakt nog geen traag programma, en een snelle berekening maakt nog geen product dat vlot reageert.

Geef “snel” een getal

Prestaties beschrijven hoe goed software voldoet aan meetbare tijdseisen. Bruikbare eisen klinken zo: maak het rapport binnen dertig seconden; beantwoord de meeste verzoeken binnen een halve seconde; verwerk tienduizend afbeeldingen vóór de ochtend.

“Zo snel mogelijk” zegt een team niets, want het geeft niet aan wanneer het kan stoppen. Met een echt getal kun je bepalen wanneer het werk klaar is.

Meet vervolgens het echte programma. Het deel waarin de tijd gaat zitten heet de hot spot. Het doel is die plek te vinden in plaats van te raden, want intuïtie hierover blijkt vaak onbetrouwbaar.

Waar de tijd meestal naartoe gaat

Gewone Python herhaalt iets miljoenen keren. Een programma voert voor elk punt in een enorme verzameling metingen één kleine berekening uit. Python moet daarbij elke keer zijn eigen flexibele regels volgen. Die extra kosten zijn één keer verwaarloosbaar, maar kunnen na een miljoen herhalingen enorm worden.

Als daar de tijd naartoe gaat en het project veel meer snelheid nodig heeft, is gewone Python meestal niet de eerste keuze voor dat onderdeel. Let op hoe beperkt die uitspraak is. Niemand wijst het hele programma af. Je kunt de methode veranderen zodat er minder werk nodig is, een geoptimaliseerde bibliotheek aanroepen of één onderdeel naar een snellere taal verplaatsen.

Het programma wacht. Een webdienst vraagt gegevens op bij een database en wacht daarna op de database, het netwerk of een andere dienst. Herschrijven in een snellere taal laat de database niet eerder antwoorden. Python blijft hier vaak goed geschikt. De oplossing zit meestal in betere databasevragen of minder vragen.

Python vraagt een geoptimaliseerde bibliotheek om het werk te doen. Het patroon uit de AI-les. Vraag NumPy om twee enorme verzamelingen getallen op te tellen. De herhaling gebeurt dan in code die daarvoor is gemaakt, niet als miljoenen aparte Python-stappen. Python bereidt het verzoek voor, ontvangt het resultaat en voert de rest van het programma uit.

Python kan dus goed geschikt zijn voor het hele proces, ook wanneer het geen goede keuze zou zijn om de centrale berekening zelf in te schrijven.

Ik heb hier bewust geen benchmarkcijfers opgenomen. Een cijfer dat is gemeten op één computer, Python-versie en voorbeeld kan misleidend advies worden voor een ander project. Wat je wel kunt meenemen, is de volgorde van redeneren: benoem wat je nodig hebt, meet het echte programma, vind de hot spot en beslis daarna wat je verandert.

Werk verplaatsen is niet gratis

Python kan samenwerken met C, C++, Rust en andere talen. Dat is een echte mogelijkheid voor een veeleisende hot spot. Maar het creëert ook een grens die iemand moet onderhouden. Beide kanten moeten het eens zijn over wat die grens overgaat, en de code moet misschien voor elk systeem apart worden gebouwd.

Voor een belangrijke hot spot kan dat de moeite waard zijn. Voor een programma dat al aan zijn eis voldoet, heb je complexiteit gekocht zonder er iets mee op te lossen.

Dat is nog een reden waarom Python kennen nuttig is. Het kan een groot deel van het werk doen en precies waar de eis strenger wordt samenwerken met een gespecialiseerder hulpmiddel.

Snelheid is alleen niet de enige grens. Sommige software moet werken met veel minder geheugen dan een laptop heeft, of veel dichter op de hardware zitten dan Python ooit doet. Daarover gaat de volgende les.