Jeremy Dunck
Jeremy Dunck

Reputation: 5894

time.sleep -- sleeps thread or process?

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

Upvotes: 431

Views: 360451

Answers (7)

Zach Burlingame
Zach Burlingame

Reputation: 13806

It will just sleep the thread except in the case where your application has only a single thread, in which case it will sleep the thread and effectively the process as well.

The python documentation on sleep() doesn't specify this however, so I can certainly understand the confusion!

Upvotes: 69

user12747367
user12747367

Reputation:

it blocks a thread if it is executed in the same thread not if it is executed from the main code

Upvotes: 1

Denis The Menace
Denis The Menace

Reputation: 500

Process is not runnable by itself. In regard to execution, process is just a container for threads. Meaning you can't pause the process at all. It is simply not applicable to process.

Upvotes: 2

Ali Abbasinasab
Ali Abbasinasab

Reputation: 392

Only the thread unless your process has a single thread.

Upvotes: 5

Corey Goldberg
Corey Goldberg

Reputation: 60604

The thread will block, but the process is still alive.

In a single threaded application, this means everything is blocked while you sleep. In a multithreaded application, only the thread you explicitly 'sleep' will block and the other threads still run within the process.

Upvotes: 20

Nick Bastin
Nick Bastin

Reputation: 31329

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

Upvotes: 431

finnw
finnw

Reputation: 48619

Just the thread.

Upvotes: 43

Related Questions