Jer*_*nck 352 python time multithreading sleep python-internals
在Python for*nix中,是否会time.sleep()
阻塞线程或进程?
Nic*_*tin 328
它会阻止线程.如果查看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()
Run Code Online (Sandbox Code Playgroud)
哪个会打印:
>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102
Run Code Online (Sandbox Code Playgroud)
Zac*_*ame 50
除了你的应用程序只有一个线程的情况之外,它只会睡眠线程,在这种情况下它将睡眠线程并有效地处理该过程.
关于睡眠的python文档并没有指定这个,所以我当然可以理解这种混乱!
http://docs.python.org/2/library/time.html