time.sleep是让线程还是进程休眠?
在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