【问题标题】:What does JoinableQueue.join() Block?JoinableQueue.join() 阻止了什么?
【发布时间】:2015-03-27 21:10:06
【问题描述】:

JoinableQueue 的文档说

join()阻塞,直到队列中的所有项目都被获取并处理完

我知道当我调用Process.join()Thread.join()时,当前进程或线程的执行会停止,直到我调用的join方法的进程或线程退出。

Process 的文档使用与 JoinableQueue 相同的语言

join([timeout]) 阻塞调用线程,直到调用其 join() 方法的进程终止或直到发生可选超时。

我是否总是可以将“阻塞”理解为暂停调用线程直到满足某些条件?我在文档中找不到任何确认。如果我搜索“block python”,我只会找到有关代码块或我上面引用的相同文档的信息。

【问题讨论】:

  • 我是否总是可以理解“阻塞”是指暂停调用线程直到满足某些条件? 在 python 中的多线程/多处理上下文中,几乎总是:是的。
  • @jedwards 太好了!我认为JoinableQueue 属于 python 中的多线程/多处理。
  • 确实如此——看看its package :)
  • 请参阅here,了解有关阻塞含义的更一般的问题。这是一个用于所有软件开发的术语,不仅仅是在 Python 中。
  • @dano 这是一个很好的链接,我并不是说阻塞仅在 python 中使用,只是在这种情况下,OP 可以安全地将这个含义与该术语相关联。我不能谈论其他语言如何决定使用它,如果他们决定以不同的方式使用它(这当然会很奇怪和令人困惑)——但这就是我获得资格的原因。如有误导,请见谅。

标签: python python-multiprocessing


【解决方案1】:

Python 的文档在 http://en.wikipedia.org/wiki/Process_state 的经典意义上使用“阻塞”(以及同一词干“块”的其他形式)——任何线程(或进程)都可以“运行”或“准备就绪”(但等待 CPU),或“阻塞”(然后在它基本上完成后“终止”)。

(特别是在 CPython 中,在给定的进程中,无论有多少 CPU 可用,只有一个线程可以“运行”Python代码——其他在抽象意义上“就绪”的实际上被 Global Interpreter Lock aka GIL 在内部阻止了——但是,这是一个实现细节,仅适用于某些实现,不适用于 Python 作为一种语言)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多