time.sleep是让线程还是进程休眠?

424 投票
7 回答
335706 浏览
提问于 2025-04-11 09:18

在Python的*nix系统中,time.sleep()是让程序暂停运行的一个方法。它是让当前的线程停止工作,而不是整个程序都停下来。简单来说,就是它只让正在执行的那部分代码暂时休息,而其他的部分如果有的话,还是可以继续运行。

7 个回答

40

就只是这个线程。

67

这段话的意思是,除了你应用程序只有一个线程的情况外,调用这个函数会让线程“休眠”,也就是说它会暂停工作。如果你的应用只有一个线程,那这个线程就会休眠,实际上整个程序也会停下来。

不过,Python的官方文档在讲解这个sleep()函数时并没有特别说明这一点,所以我能理解大家会感到困惑!

424

这会阻塞当前的线程。如果你查看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

撰写回答