在Python for*nix中,是否会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文档并没有指定这个,所以我当然可以理解这种混乱!
http://docs.python.org/2/library/time.html
只是线程.
线程将阻塞,但进程仍然存在.
在单线程应用程序中,这意味着在您睡觉时一切都被阻止.在多线程应用程序中,只有您明确"睡眠"的线程才会阻塞,而其他线程仍在该进程中运行.