首页 文章

time.sleep - 睡眠线程还是进程?

提问于
浏览
307

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

6 回答

  • 8

    它会阻止线程 . 如果查看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
    
  • 24

    它只会睡眠线程,除非你的应用程序只有一个线程,在这种情况下,它将睡眠线程并有效地处理该过程 .

    关于睡眠的python文档并没有指定这一点,所以我当然可以理解这种混乱!

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

  • 286

    只是线程 .

  • 2

    线程将阻塞,但进程仍然存在 .

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

  • 1

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

  • 44

    流程本身不可运行 . 关于执行,进程只是线程的容器 . 这意味着你根本不能暂停这个过程 . 它根本不适用于流程 .

相关问题