time.sleep - 睡眠线程还是进程?

时间:2008-09-18 14:16:45

标签: python multithreading time sleep python-internals

在Python for * nix中,time.sleep()会阻塞线程还是进程?

7 个答案:

答案 0 :(得分:304)

它会阻止线程。如果查看Python源代码中的Modules / timemodule.c,您会看到在调用floatsleep()时,睡眠操作的实质部分包含在Py_BEGIN_ALLOW_THREADS和Py_END_ALLOW_THREADS块中,允许其他线程继续在当前的一个人睡觉时执行。您还可以使用一个简单的python程序对此进行测试:

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()

将打印:

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

答案 1 :(得分:47)

除了你的应用程序只有一个线程的情况之外,它只会睡眠线程,在这种情况下,它将使线程休眠并有效地处理该过程。

关于睡眠的python文档并没有指定这个,所以我当然可以理解这种混乱!

http://docs.python.org/2/library/time.html

答案 2 :(得分:27)

只是线程。

答案 3 :(得分:9)

线程会阻塞,但进程仍然存在。

在单线程应用程序中,这意味着在您睡觉时一切都被阻止。在多线程应用程序中,只有您明确“睡眠”的线程才会阻塞,而其他线程仍在该进程中运行。

答案 4 :(得分:2)

除非你的进程只有一个线程,否则只有线程。

答案 5 :(得分:2)

进程本身不可运行。关于执行,进程只是线程的容器。这意味着你根本不能暂停这个过程。它根本不适用于流程。

答案 6 :(得分:1)

如果在同一线程中执行,则阻塞线程,而不是从主代码执行时,则阻塞