在Python for * nix中,是否time.sleep()
阻塞线程或进程?
在Python for * nix中,是否time.sleep()
阻塞线程或进程?
Answers:
它阻塞线程。如果在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(3)
说:“ sleep()使调用线程进入睡眠状态,直到经过几秒钟或信号到来,而忽略该信号。” 并且有Python文档错误。
进程本身无法运行。关于执行,进程只是线程的容器。这意味着您根本无法暂停该过程。它根本不适用于过程。
sleep
将暂停该命令。
如果它在同一线程中执行,则它将阻塞一个线程,如果不是从主代码中执行,则它将阻塞该线程