在 Python 中,*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

其他提示

它只会休眠线程,除非您的应用程序只有一个线程,在这种情况下,它将休眠线程并有效地休眠进程。

然而关于 sleep 的 python 文档没有指定这一点,所以我当然可以理解这种困惑!

http://docs.python.org/2/library/time.html

只是线程。

线程会阻塞,但进程仍然存活。

在单线程应用程序中,这意味着在您睡眠时一切都会被阻塞。在多线程应用程序中,只有您显式“睡眠”的线程才会阻塞,而其他线程仍在进程中运行。

只有线程,除非您的进程只有一个线程。

进程本身不能运行。就执行而言,进程只是线程的容器。这意味着您根本无法暂停该过程。它根本不适用于流程。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top