为什么.join()方法在线程模块中调用.join()?

时间:2018-06-08 17:07:53

标签: python multithreading python-multithreading

这是一个相当愚蠢的问题......然而它却让我感到困惑。在threading模块中,我们有Thread.join()方法。 我知道它阻止了调用线程,但为什么.join()被称为'join'?为什么它不被称为main_thread_waitblock_parent_thread或类似的东西?

每次看到.join()时,我都觉得孩子们正在加入一些事情来完成工作。为方法名称选择此特定关键字是否有某些原因?

2 个答案:

答案 0 :(得分:1)

此名称远比Python早。它在POSIX线程库(libpthread)中显示为pthread_join()(使用" pthread"前缀,因为C没有名称空间)。但是,对于进程级并发,PythonPOSIX都使用名称wait()

pthread库的其他部分确实使用术语“等待”,但通常用于更高级别的同步原语,例如pthread_barrier_wait()pthread_cond_wait()。我想pthread_wait()在等待[某些同步对象]"之间会有些模棱两可。和#34;等待线程终止。"

答案 1 :(得分:0)

子线程加入父级。 Thread.start让父母产生一个线程让它自由。 Thread.join使父块(等待)直到孩子完成其工作。

你可以这样想象:

  • 父线程是一个可以长寿的强大神
  • Thread.start生下一个凡人
  • 在它诞生之后,凡人逃跑并开始过自己的生活(执行run方法)
  • 上帝可能会继续关注自己的事业
  • 他也可能想看看他的后代,看看是否真的is_alive
  • 他也可能开始观察后代的整个生命,等待他回来,直到后者去世(这是join方法)。在这样做时,上帝不能做任何其他事情,因为他喜欢非常崇拜他的生物(召唤join阻止父母的线索),但在凡人死后,上帝可以继续他的生命