在*nix系统下的Python中,
time.sleep()
会阻塞线程还是进程?time.sleep()
会阻塞线程还是进程?它会阻塞线程。如果你查看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
除非您的应用程序只有一个线程,在这种情况下,它将使该线程以及实际上整个进程睡眠,否则它只会使线程睡眠。
然而,Python文档关于sleep()
并没有明确说明这一点,因此我可以理解造成的困惑!
sleep(3)
表示:“使调用线程睡眠,直到经过了seconds秒或一个未被忽略的信号到达。”并且存在Python文档错误。 - jfs只需线程。
该线程将被阻塞,但进程仍然存在。
在单线程应用程序中,这意味着当您休眠时一切都被阻塞。在多线程应用程序中,只有您明确“休眠”的线程将会被阻塞,其他线程仍将在进程内运行。
除非您的进程仅有一个线程,否则只会影响该线程。
进程本身无法运行,它只是线程的容器。因此,在执行方面,无法暂停进程。这对进程根本不适用。
sleep
命令将会暂停的内容。 - tripleee