Search code examples
pythonmultithreadingtimesleeppython-internals

time.sleep -- sleeps thread or process?


In Python for *nix, does time.sleep() block the thread or the process?


Solution

  • It blocks the thread. If you look in Modules/timemodule.c in the Python source, you'll see that in the call to floatsleep(), the substantive part of the sleep operation is wrapped in a Py_BEGIN_ALLOW_THREADS and Py_END_ALLOW_THREADS block, allowing other threads to continue to execute while the current one sleeps. You can also test this with a simple python program:

    import time
    from threading import Thread
    
    class worker(Thread):
        def run(self):
            for x in xrange(0,11):
                print x
                time.sleep(1)
    
    class waiter(Thread):
        def run(self):
            for x in xrange(100,103):
                print x
                time.sleep(5)
    
    def run():
        worker().start()
        waiter().start()
    

    Which will print:

    >>> thread_test.run()
    0
    100
    >>> 1
    2
    3
    4
    5
    101
    6
    7
    8
    9
    10
    102