Tutorial

Python time.sleep(): How to Pause Execution in Python Scripts

Updated on April 10, 2025
Python time.sleep(): How to Pause Execution in Python Scripts

Hello everyone, hope you are learning Python well. In this tutorial we will learn about python time sleep() method. Python sleep function belongs to the python time module that is already discussed earlier.

Python time sleep

Python time sleep function is used to add delay in the execution of a program. We can use python sleep function to halt the execution of the program for given time in seconds. Notice that python time sleep function actually stops the execution of current thread only, not the whole program.

Python time sleep() function syntax

Python sleep() is a method of python time module. So, first we have to import the time module then we can use this method. Way of using python sleep() function is: python time sleep, python sleep Here the argument of the sleep() method t is in seconds. That means, when the statement time.sleep(t) is executed then the next line of code will be executed after t seconds. See the following example:

# importing time module
import time

print("Before the sleep statement")
time.sleep(5)
print("After the sleep statement")

If you run the above code then you will see that the second print executes after 5 seconds. So you can make delay in your code as necessary. The argument can be in floating value also to have more precise delay. For example you want to make delay for 100 milliseconds which is 0.1 seconds, as following:

import time
time.sleep(0.100)

Python sleep example

Let’s see the following example of python time sleep function.

import time
startTime = time.time()
for i in range(0,5):
   print(i)
   # making delay for 1 second
   time.sleep(1)
endTime = time.time()
elapsedTime = endTime - startTime
print("Elapsed Time = %s" % elapsedTime)

This will output:

0
1
2
3
4
Elapsed Time = 5.059988975524902

Elapsed time is greater than 5 because each time in the for loop, execution is halted for 1 second. The extra time is because of the execution time of the program, operating system thread scheduling etc.

Different delay time of python sleep()

Sometimes you may need to delay for different seconds of time. You can do it as follows:

import time

for i in [ .5, .1, 1, 2]:
   print("Waiting for %s" % i , end='')
   print(" seconds")
   time.sleep(i)

This will output:

Waiting for 0.5 seconds
Waiting for 0.1 seconds
Waiting for 1 seconds
Waiting for 2 seconds

Dramatic printing using sleep()

You may need to print some message in a dramatic way, you can do it as following:

# importing time module
import time
message = "Hi!!! I am trying to create suspense"

for i in message:
   # printing each character of the message
   print(i)
   time.sleep(0.3)

If you run the above code then, you will see that after printing every character of the message it’s taking some time, which seems like dramatic.

Python thread sleep

Python time sleep() function is very important method for multithreading. Below is a simple example showing that the python time sleep function halts the execution of current thread only in multithreaded programming.

import time
from threading import Thread


class Worker(Thread):
    def run(self):
        for x in range(0, 11):
            print(x)
            time.sleep(1)


class Waiter(Thread):
    def run(self):
        for x in range(100, 103):
            print(x)
            time.sleep(5)


print("Staring Worker Thread")
Worker().start()
print("Starting Waiter Thread")
Waiter().start()
print("Done")

Below image shows the output produced by above python thread sleep example. python thread sleep, python time sleep multithreading, python sleep example thread From the output it’s very clear that only the threads are being stopped from execution and not the whole program by python time sleep function.

When to use time.sleep()

time.sleep() is a synchronous function that blocks the execution of the current thread for a specified amount of time. It’s useful in scenarios where you need to introduce a delay in your program’s execution, such as:

  • Simulating a delay in a script to mimic user interaction or to wait for a specific event to occur.
  • Creating a simple timer or a countdown.
  • Introducing a delay between retries in a loop that attempts to perform an operation that might fail due to temporary conditions.

Here’s an example of using time.sleep() to simulate a delay:

import time

print("Starting operation...")
time.sleep(5)  # Simulate a 5-second delay
print("Operation completed.")

Alternatives like asyncio.sleep() for async programming

In asynchronous programming, time.sleep() is not suitable as it blocks the entire event loop. Instead, you should use asyncio.sleep() from the asyncio module. This function is a coroutine that suspends the execution of the surrounding coroutine for a specified amount of time.

Here’s an example of using asyncio.sleep() in an asynchronous context:

import asyncio

async def my_task():
    print("Starting operation...")
    await asyncio.sleep(5)  # Simulate a 5-second delay
    print("Operation completed.")

asyncio.run(my_task())

Note that asyncio.sleep() is a coroutine, so it must be awaited or used within an asynchronous context.

How time.sleep() affects execution time

time.sleep() can significantly impact the execution time of a program, especially when used extensively or with large sleep durations. This is because time.sleep() blocks the execution of the current thread, causing other parts of the program to wait until the sleep duration has elapsed.

For example, consider a scenario where you need to perform a series of operations that require a delay between each operation. If you use time.sleep() within a loop to introduce these delays, the total execution time of the program will be significantly longer than if the operations were performed without delays.

Here’s an example that demonstrates the impact of time.sleep() on execution time:

import time

def perform_operations_with_sleep():
    start_time = time.time()
    for i in range(10):
        print(f"Operation {i} started...")
        time.sleep(1)  # Introduce a 1-second delay
        print(f"Operation {i} completed.")
    end_time = time.time()
    print(f"Total execution time: {end_time - start_time} seconds")

perform_operations_with_sleep()

In this example, the total execution time will be approximately 10 seconds, which is the sum of the sleep durations for each operation.

Alternatives to time.sleep() for responsive applications

In scenarios where responsiveness is crucial, using time.sleep() can be detrimental to the user experience. This is because time.sleep() blocks the execution of the current thread, which can lead to unresponsiveness or even crashes in GUI applications.

To address this issue, there are alternative approaches that can be used to introduce delays without blocking the main thread. Here are a few examples:

asyncio.sleep()

asyncio.sleep() is a coroutine that suspends the execution of the surrounding coroutine for a specified amount of time. It’s ideal for asynchronous programming and can be used to introduce non-blocking delays.

Here’s an example of using asyncio.sleep() to perform operations with delays without blocking the main thread:

import asyncio

async def perform_operations_async():
    start_time = time.time()
    for i in range(10):
        print(f"Operation {i} started...")
        await asyncio.sleep(1)  # Introduce a 1-second delay without blocking
        print(f"Operation {i} completed.")
    end_time = time.time()
    print(f"Total execution time: {end_time - start_time} seconds")

asyncio.run(perform_operations_async())

In this example, the total execution time will still be approximately 10 seconds, but the program will remain responsive during the execution of the operations.

Timer objects

Python’s threading module provides a Timer class that can be used to schedule a function to run after a specified delay. This approach is useful when you need to perform a specific action after a delay without blocking the main thread.

Here’s an example of using a Timer object to perform an operation after a delay:

import threading

def perform_operation_after_delay():
    print("Operation started...")
    # Perform the operation
    print("Operation completed.")

# Create a Timer object to schedule the operation after a 5-second delay
timer = threading.Timer(5.0, perform_operation_after_delay)
timer.start()

# The main thread can continue executing without blocking
print("Main thread is not blocked.")

In this example, the operation will be performed after a 5-second delay without blocking the main thread.

Common Errors and Debugging

Blocking the main thread unintentionally

When using time.sleep() in the main thread, it can block the entire program, leading to unresponsiveness or even crashes. This is particularly problematic in GUI applications where the main thread is responsible for handling user interactions.

To avoid blocking the main thread, consider using time.sleep() in a separate thread or using asynchronous programming with asyncio.sleep(). This allows other parts of the program to continue executing while the sleep operation is in progress.

Here’s a simple example of using time.sleep() in a separate thread to avoid blocking the main thread:

import threading
import time

def sleep_in_thread():
    print("Starting operation...")
    time.sleep(5)  # Simulate a 5-second delay
    print("Operation completed.")

# Create a new thread for the sleep operation
thread = threading.Thread(target=sleep_in_thread)
thread.start()

# The main thread can continue executing without blocking
print("Main thread is not blocked.")

Using time.sleep() inside loops inefficiently

Using time.sleep() inside a loop can lead to inefficient code, especially when the sleep duration is significant. This is because time.sleep() blocks the execution of the entire thread, including other iterations of the loop.

To optimize the use of time.sleep() inside loops, consider the following approaches:

  • Use a single time.sleep() call at the end of the loop to accumulate the total sleep time needed.
  • Implement a more efficient timing mechanism, such as using a timer or a scheduling library.
  • Consider using asynchronous programming to allow other tasks to run concurrently with the loop.

Here’s an example of inefficient use of time.sleep() inside a loop:

for i in range(10):
    print(i)
    time.sleep(1)  # Sleep for 1 second after each iteration

And here’s an optimized version:

for i in range(10):
    print(i)
time.sleep(10)  # Sleep for the total accumulated time after the loop

Alternative approaches for non-blocking delays

In scenarios where time.sleep() is not suitable due to its blocking nature, consider the following alternative approaches for non-blocking delays:

  • asyncio.sleep(): As mentioned earlier, asyncio.sleep() is a coroutine that suspends the execution of the surrounding coroutine for a specified amount of time. It’s ideal for asynchronous programming.
  • Timer objects: Python’s threading module provides a Timer class that can be used to schedule a function to run after a specified delay. This approach is useful when you need to perform a specific action after a delay without blocking the main thread.
  • Scheduling libraries: Libraries like schedule or apscheduler provide a more sophisticated way of scheduling tasks to run at specific times or intervals. These libraries can be used to implement non-blocking delays in a more efficient and flexible manner.

Here’s an example of using asyncio.sleep() for a non-blocking delay:

import asyncio

async def my_task():
    print("Starting operation...")
    await asyncio.sleep(5)  # Simulate a 5-second delay
    print("Operation completed.")

asyncio.run(my_task())

FAQs

What does time.sleep() do in Python?

The time.sleep() function in Python is used to suspend the execution of the current thread for a specified number of seconds. It is a blocking function, which means it stops the execution of the entire program for the specified duration.

How do you pause execution in Python?

You can pause the execution of a Python program using the time.sleep() function. Here’s an example:

import time
time.sleep(5)  # Pause the program for 5 seconds

Can time.sleep() take decimal values for milliseconds?

No, time.sleep() only takes integer values for seconds. If you need to pause for a fraction of a second, you can use the time.sleep() function with a float value.

Does time.sleep() block the entire program?

Yes, time.sleep() blocks the entire program for the specified duration. This means that no other code will be executed during the sleep period.

How can I stop execution without time.sleep()?

If you need to pause the execution of a program without using time.sleep(), you can consider using a non-blocking delay approach such as asyncio.sleep() or Timer objects.

What is the difference between time.sleep() and asyncio.sleep()?

The time.sleep() function is a blocking function that suspends the execution of the entire program for a specified number of seconds. On the other hand, asyncio.sleep() is a coroutine that suspends the execution of the surrounding coroutine for a specified amount of time. It is ideal for asynchronous programming.

Can time.sleep() be interrupted?

No, time.sleep() cannot be interrupted. Once the sleep period starts, it will continue for the specified duration without any interruption.

Conclusion

In conclusion, the time.sleep() function is a fundamental tool in Python for introducing delays in program execution. Understanding its blocking nature and limitations is crucial for writing efficient and responsive code. For more advanced control over program flow, consider exploring asynchronous programming with asyncio.sleep().

To further enhance your Python skills, we recommend checking out these tutorials:

These resources will provide you with a deeper understanding of Python’s capabilities and help you tackle more complex tasks.

Reference: StackOverFlow Post, API Doc.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the author(s)

Pankaj Kumar
Pankaj Kumar
See author profile
Category:
Tutorial
Tags:

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
JournalDev
DigitalOcean Employee
DigitalOcean Employee badge
October 21, 2018

That was an awesome, concise and clear explanation! Thanks very much!

- Matt

    JournalDev
    DigitalOcean Employee
    DigitalOcean Employee badge
    April 27, 2019

    Awesome tutorial!

    - Mika Kaakinen

      Join the Tech Talk
      Success! Thank you! Please check your email for further details.

      Please complete your information!

      Become a contributor for community

      Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

      DigitalOcean Documentation

      Full documentation for every DigitalOcean product.

      Resources for startups and SMBs

      The Wave has everything you need to know about building a business, from raising funding to marketing your product.

      Get our newsletter

      Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

      New accounts only. By submitting your email you agree to our Privacy Policy

      The developer cloud

      Scale up as you grow — whether you're running one virtual machine or ten thousand.

      Get started for free

      Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

      *This promotional offer applies to new accounts only.