【发布时间】:2010-09-10 17:05:41
【问题描述】:
在 Python for *nix 中,time.sleep() 会阻塞线程还是进程?
【问题讨论】:
标签: python multithreading time sleep python-internals
在 Python for *nix 中,time.sleep() 会阻塞线程还是进程?
【问题讨论】:
标签: python multithreading time sleep python-internals
它阻塞了线程。如果您查看 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
【讨论】:
它只会休眠线程,除非您的应用程序只有一个线程,在这种情况下,它将休眠线程并有效地处理进程。
sleep() 上的 python 文档没有说明这一点,所以我当然可以理解其中的困惑!
只是线程。
【讨论】:
线程会阻塞,但进程还活着。
在单线程应用程序中,这意味着在您睡觉时一切都被阻塞。在多线程应用程序中,只有您明确“休眠”的线程会阻塞,其他线程仍在进程中运行。
【讨论】:
只有线程,除非你的进程有一个线程。
【讨论】:
进程本身不可运行。在执行方面,进程只是线程的容器。这意味着您根本无法暂停该过程。它根本不适用于流程。
【讨论】:
sleep 命令将暂停的内容。
如果它在同一个线程中执行而不是从主代码执行,它会阻塞一个线程
【讨论】: