Soms moet een programma even pauzeren: wachten tot gegevens zijn geladen, de gebruiker tijd geven om iets in te voeren, of de systeembelasting verlagen. Een van de eenvoudigste manieren om dat in Python te doen, is met de functie time.sleep(), die de uitvoering van het programma onderbreekt voor een opgegeven tijdsinterval.
In dit artikel bekijken we hoe time.sleep() werkt in Python, wat de kenmerken en alternatieven zijn, welke fouten vaak voorkomen, en wanneer het beter is om asyncio.sleep() of andere wachtmechanismen te gebruiken — vooral bij multithreaded en asynchrone programma’s.
De functie sleep() is opgenomen in de standaardbibliotheek van Python om het maken van pauzes in code eenvoudiger te maken. Ze maakt deel uit van de module time en wordt aangeroepen als time.sleep(), waarmee de uitvoering van het programma tijdelijk wordt onderbroken voor een bepaald aantal seconden.
In de praktijk is sleep() handig voor testomgevingen, vertraging tussen API-verzoeken of pauzes tussen berichten. Gebruik ze echter niet voor systeemniveau-taken zoals thread-synchronisatie of nauwkeurige timing: daar bestaan betere tools voor.
De functie time.sleep() pauzeert de huidige thread gedurende het opgegeven aantal seconden. In een multithreaded programma blijven andere threads doorgaan, terwijl de thread waarin time.sleep() is aangeroepen “bevroren” blijft gedurende dat interval.
Belangrijk: time.sleep() blokkeert de uitvoering van de code op dat punt en stelt alle volgende bewerkingen uit. Onzorgvuldig gebruik kan leiden tot prestatieverlies of een vastgelopen gebruikersinterface in desktop-toepassingen.
time.sleep() wordt het vaakst gebruikt bij testen en debuggen, wanneer een korte vertraging nodig is — bijvoorbeeld om een API-antwoord te controleren of te wachten op een serverreactie. Ze wordt ook gebruikt om scripts stapsgewijs uit te voeren, zodat gebruikers de tijd hebben om informatie te lezen of gegevens in te voeren.
In demo’s, tutorials en prototypes helpt time.sleep() om langdurige processen te simuleren, en bij het werken met externe diensten voorkomt ze blokkering door te frequente verzoeken. Maar dit is niet de enige manier om de uitvoering van code te vertragen — hieronder volgen enkele alternatieven.
Het gebruik van time.sleep() in Python is eenvoudig, zelfs voor beginners. Toch is het belangrijk om de nuances te begrijpen, omdat ze de prestaties of het gedrag van het programma kunnen beïnvloeden.
Om de functie aan te roepen, importeer eerst de module time:
import time
time.sleep(5)
In dit voorbeeld “slaapt” het programma 5 seconden. De waarde die wordt doorgegeven kan een geheel getal of een kommagetal zijn, zodat ook fracties van seconden mogelijk zijn.
Syntaxis:
time.sleep(seconds)
De functie geeft geen waarde terug — ze pauzeert eenvoudigweg de huidige thread gedurende de opgegeven duur.
Hier is een klein script dat berichten met een tussenpauze van twee seconden afdrukt:
import time
print("First message")
time.sleep(2)
print("Second message")
time.sleep(2)
print("Third message")
Bij het uitvoeren van dit script ziet de gebruiker een pauze van 2 seconden tussen elk bericht. Zo werkt een vertraging in Python met time.sleep(2).
De functie accepteert één parameter, die een integer of een float kan zijn. Dit biedt flexibiliteit bij het implementeren van vertragingen.
De meest gebruikelijke manier is een geheel getal dat het aantal seconden weergeeft:
time.sleep(10)
Het script pauzeert hier 10 seconden — handig voor langere pauzes of om de frequentie van verzoeken te beperken.
Soms is een kortere pauze nodig. Gebruik dan een kommagetal:
time.sleep(0.5)
Dit zorgt voor een pauze van een halve seconde. Door beperkingen van het besturingssysteem en de interne timer van Python kan de daadwerkelijke vertraging iets langer zijn. Voor real-time systemen of toepassingen die nauwkeurige timing vereisen, zijn gespecialiseerde timers beter geschikt.
Hoewel time.sleep() de populairste en eenvoudigste methode is, zijn er andere manieren die beter werken wanneer je moet wachten op externe gebeurtenissen of met meerdere threads werkt.
De eenvoudigste manier om een programma tijdelijk te stoppen is met input(). Deze functie pauzeert de uitvoering totdat de gebruiker op Enter drukt of tekst invoert.
print("Press Enter to continue...")
input()
print("Resuming program execution")
Dit is geen echte tijdvertraging, maar een wacht-op-gebruikersactie. Handig bij debugging of interactieve scripts, maar zelden in geautomatiseerde processen.
In multithreaded programma’s kun je synchronisatie-objecten zoals threading.Event() gebruiken, die een thread blokkeren totdat een signaal wordt ontvangen.
import threading
event = threading.Event()
def worker():
print("Starting work in thread")
event.wait()
print("Event received, resuming work")
thread = threading.Thread(target=worker)
thread.start()
import time
time.sleep(3)
event.set()
In dit voorbeeld blijft de thread geblokkeerd tot event.set() wordt aangeroepen. Dit biedt meer controle, want de thread kan op elk moment worden “gewekt”.
In asynchrone Python-programma’s (met de module asyncio) wordt asyncio.sleep() gebruikt. In tegenstelling tot time.sleep() blokkeert deze functie niet de hele thread, maar alleen de huidige coroutine, zodat de event-loop andere taken kan blijven uitvoeren.
import asyncio
async def main():
print("Start async work")
await asyncio.sleep(2)
print("2 seconds passed, resuming")
asyncio.run(main())
Dit is vooral nuttig wanneer meerdere asynchrone functies parallel moeten draaien. Als je in dit geval time.sleep() zou gebruiken, zou dat de hele event-loop blokkeren.
Hoewel time.sleep() eenvoudig is, kan verkeerd gebruik leiden tot onverwachte blokkades of vertragingen. Begrijpen hoe het de uitvoering beïnvloedt is daarom essentieel.
De functie blokkeert de thread waarin ze wordt aangeroepen. Als dit de hoofdthread van een GUI-toepassing is (bijvoorbeeld Tkinter of PyQt), kan de interface bevriezen.
💡 Tip:
Gebruik time.sleep() alleen in achtergrondthreads of vervang ze door asyncio.sleep() om blokkades te voorkomen. In grafische applicaties kun je beter timers gebruiken zoals QTimer of after().
In een multithreaded programma kan time.sleep() afzonderlijk in elke thread worden aangeroepen, maar ze ontgrendelt niet automatisch de Global Interpreter Lock (GIL).
Of andere threads kunnen draaien hangt af van de thread-scheduler van het besturingssysteem.
In asynchrone code moet je voorzichtig zijn: als time.sleep() wordt aangeroepen binnen een event-loop (zoals bij asyncio.run()), blokkeert dit de hele loop.
Gebruik daarom asyncio.sleep(), dat de controle teruggeeft aan de scheduler en andere coroutines laat doorlopen.
Stel dat je een script schrijft dat een externe API regelmatig moet bevragen, maar de regels schrijven voor dat dit hoogstens één keer per 30 seconden mag gebeuren.
Oplossing met time.sleep():
import time
def poll_api():
print("Making API request...")
def main():
while True:
poll_api()
time.sleep(30)
if __name__ == "__main__":
main()
Na elk verzoek pauzeert het script 30 seconden, zodat de toegestane frequentie niet wordt overschreden.
Asynchrone variant:
import asyncio
async def poll_api():
print("Making API request...")
async def main():
while True:
await poll_api()
await asyncio.sleep(30)
if __name__ == "__main__":
asyncio.run(main())
Deze versie blokkeert het programma niet: andere taken kunnen parallel worden uitgevoerd binnen dezelfde asynchrone omgeving. Het is een flexibeler en schaalbaarder alternatief.
Het organiseren van pauzes en vertragingen is een belangrijk aspect van Python-ontwikkeling. time.sleep() is het eenvoudigste en meest toegankelijke hulpmiddel, maar de keuze tussen time.sleep(), asyncio.sleep() of andere methoden hangt af van de structuur van je project.
Gebruik time.sleep() voor korte pauzes in tests, tussen verzoeken of in demo’s.
Blokkeer de hoofdthread van GUI-applicaties niet om een “bevroren” interface te vermijden.
In asynchrone code: vervang time.sleep() door asyncio.sleep() om de event-loop efficiënt te houden.
In multithreaded programma’s: onthoud dat alleen de huidige thread pauzeert.