time.sleep-休眠线程或者进程吗?

时间:2020-03-06 14:21:33  来源:igfitidea点击:

在Python for * nix中,time.sleep()是否阻塞线程或者进程?

解决方案

只是线程。

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

睡眠中的python文档未指定此内容,因此我当然可以理解混淆!

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

该线程将阻塞,但是该进程仍在运行。

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

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