views:

4014

answers:

4

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

+7  A: 

Just the thread.

finnw
+4  A: 

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!

http://python.org/doc/current/lib/module-time.html

Burly
Upped for referencing documentation.
Patrick Johnmeyer
A: 

yes, agree with Burly.

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.

Corey Goldberg
+22  A: 

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
Nick Bastin