Complete guide to Python's time.sleep function covering delays, pauses, and practical timing examples.
Last modified April 11, 2025
This comprehensive guide explores Python’s time.sleep function, which suspends execution for a given number of seconds. We’ll cover basic usage, timing control, and practical examples.
The time.sleep function suspends execution of the current thread for the given number of seconds. The argument can be a floating point number for subsecond precision.
Key characteristics: platform-dependent accuracy (typically better than millisecond), non-busy waiting (releases CPU), and interruptible with KeyboardInterrupt (Ctrl+C).
The simplest use of time.sleep pauses program execution. This example shows basic usage with different delay durations.
basic_sleep.py
import time
print(“Starting…”) time.sleep(1) # Sleep for 1 second print(“1 second has passed”)
time.sleep(0.5) # Sleep for 500 milliseconds print(“500 milliseconds have passed”)
time.sleep(0.001) # Sleep for 1 millisecond print(“1 millisecond has passed”)
This example demonstrates how to pause execution for different durations. The sleep duration can be specified as an integer or floating-point number.
Note that actual sleep duration may vary slightly due to system scheduling and other factors.
time.sleep can be used to create simple timers. This example shows a countdown timer that prints remaining seconds.
countdown.py
import time
def countdown(seconds): while seconds > 0: print(f"Time remaining: {seconds} seconds") time.sleep(1) seconds -= 1 print(“Time’s up!”)
countdown(5)
This pattern is useful for simple timing operations. The loop decrements the counter after each sleep interval.
For more precise timing, consider using time.perf_counter to account for sleep inaccuracies.
This example uses time.sleep to implement rate limiting for API calls or other operations that need throttling.
rate_limit.py
import time
def make_api_call(): print(“Making API call at”, time.strftime("%H:%M:%S"))
def rate_limited_call(calls_per_minute): interval = 60 / calls_per_minute
while True:
make_api_call()
time.sleep(interval)
rate_limited_call(10)
The sleep duration is calculated based on the desired call rate. This ensures calls are spaced evenly over time.
For production use, consider adding error handling and exit conditions.
time.sleep can create simple text animations by controlling the timing between frames. This example shows a spinning wheel animation.
animation.py
import time
def spinning_wheel(duration): frames = [’-’, ‘\’, ‘|’, ‘/’] end_time = time.time() + duration
while time.time() < end_time:
for frame in frames:
print(f"\rLoading {frame}", end="", flush=True)
time.sleep(0.1)
print("\nDone!")
spinning_wheel(5) # Run for 5 seconds
The animation works by cycling through frames with a small delay between each. The \r moves the cursor to the start of the line for overwriting.
This technique can be adapted for progress bars or other simple animations.
time.sleep is often used to simulate processing time during development. This example shows a mock file processing function.
processing.py
import time import random
def process_file(filename): print(f"Starting processing of {filename}")
# Simulate variable processing time
processing_time = random.uniform(0.5, 2.5)
time.sleep(processing_time)
print(f"Finished processing {filename} in {processing_time:.2f} seconds")
return True
files = [“data1.txt”, “data2.txt”, “data3.txt”] for file in files: process_file(file)
The random sleep duration simulates variable processing times. This is useful for testing systems that handle asynchronous operations.
In real applications, replace the sleep with actual processing code.
This example uses time.sleep to implement a polling loop that checks for a condition at regular intervals.
polling.py
import time
def wait_for_condition(condition_func, timeout=30, interval=1): """ Wait for condition_func to return True or timeout. """ start_time = time.time()
while time.time() - start_time < timeout:
if condition_func():
return True
time.sleep(interval)
return False
def check_file_exists(): # In real code, this would check filesystem return time.time() > start_time + 3 # Simulate file appearing after 3 seconds
start_time = time.time() result = wait_for_condition(check_file_exists) print(f"Condition met: {result}")
The polling loop checks the condition at regular intervals while sleeping between checks. This prevents busy waiting that would consume CPU resources.
For production use, consider adding jitter to the interval to avoid thundering herd problems.
Precision: Sleep duration is not guaranteed to be exact
Alternatives: For precise timing, consider event-based approaches
Interrupts: Sleep can be interrupted with KeyboardInterrupt
Threading: Only the current thread is suspended
GUI apps: Avoid sleep in main thread of GUI applications
My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.
List all Python tutorials.