time.sleep-睡眠线程或进程吗?

问题描述 投票:356回答:7

在Python for * nix中,time.sleep()会阻塞线程还是进程?

python multithreading time sleep python-internals
7个回答
334
投票

它阻塞了线程。如果在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

50
投票

除非您的应用程序只有一个线程,否则它将只使线程处于睡眠状态,在这种情况下,它将使线程进入睡眠状态并有效地使进程运行。

然而,关于睡眠的python文档并未对此进行详细说明,因此我当然可以理解其中的困惑!

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


27
投票

只是线程。


11
投票

该线程将阻塞,但是该进程仍然存在。

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


2
投票

仅线程,除非您的进程具有单个线程。


2
投票

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


1
投票

如果在同一线程中执行,则阻塞线程,而不是从主代码中执行,则阻塞线程

© www.soinside.com 2019 - 2024. All rights reserved.