在Python for * nix中,time.sleep()是否会阻塞线程或进程?
它会阻止线程。如果查看Python源代码中的Modules / timemodule.c,您会看到在对floatsleep()的调用中,睡眠操作的实质部分包含在Py_BEGIN_ALLOW_THREADS和Py_END_ALLOW_THREADS块中,允许其他线程继续执行而现在的人睡了。你也可以用一个简单的python程序来测试它:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 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() |
哪个会打印:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| >>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102 |
除了你的应用程序只有一个线程的情况之外,它只会睡眠线程,在这种情况下它将睡眠线程并有效地处理该过程。
关于睡眠的python文档并没有指定这个,所以我当然可以理解这种混乱!
http://docs.python.org/2/library/time.html
只是线程。
线程将阻塞,但进程仍然存在。
在单线程应用程序中,这意味着在您睡觉时一切都被阻止。在多线程应用程序中,只有您明确"睡眠"的线程才会阻塞,而其他线程仍在该进程中运行。
只有线程,除非您的进程有一个线程。
流程本身不可运行。关于执行,进程只是线程的容器。这意味着你根本不能暂停这个过程。它根本不适用于流程。