Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在线程模块中调用.join()方法.join()?_Python_Multithreading_Python Multithreading - Fatal编程技术网

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

Python 为什么在线程模块中调用.join()方法.join()?,python,multithreading,python-multithreading,Python,Multithreading,Python Multithreading,这是一个相当愚蠢的问题……但它却让我烦透了。在threading模块中,我们有一个Thread.join()方法。 我知道它会阻止调用线程,但是为什么.join()会被称为“join”?为什么它不被称为main\u thread\u wait或block\u parent\u thread或类似的东西 每次看到.join(),我都会感觉到子线程正在连接一些东西来完成计算。选择此特定关键字作为方法名称有什么原因吗?子线程加入父线程Thread.start使父线程生成一个线程并释放它Thread.j

这是一个相当愚蠢的问题……但它却让我烦透了。在
threading
模块中,我们有一个
Thread.join()
方法。 我知道它会阻止调用线程,但是为什么
.join()
会被称为“join”?为什么它不被称为
main\u thread\u wait
block\u parent\u thread
或类似的东西


每次看到
.join()
,我都会感觉到子线程正在连接一些东西来完成计算。选择此特定关键字作为方法名称有什么原因吗?

子线程加入父线程
Thread.start
使父线程生成一个线程并释放它
Thread.join
使父块(等待)直到子块完成其工作

你可以这样想象:

  • 父线程是一个强大的神,可以活很长时间
  • Thread.start
    它生下一个凡人
  • 一出生,凡人就逃跑,开始过自己的生活(执行
    run
    方法)
  • 上帝可能会继续关心自己的事情
  • 他还可能想看看他的后代,看看它是否真的活着
  • 他也可能开始观察后代的整个生命,等待他回来,直到后者死亡(这是
    join
    方法)。在这样做的时候,上帝不能做任何其他事情,因为他非常喜欢欣赏他的造物(对
    加入
    的调用阻止了父线程),但是在凡人死后,上帝可以继续他的生活

这个名字比Python古老得多。它在POSIX线程库(libpthread)中显示为(使用“pthread”前缀是因为C没有名称空间)。但是,对于进程级并发,和都使用名称
wait()

pthread库的其他部分确实使用术语wait,但通常用于更高级别的同步原语,如或。我认为
pthread\u wait()
在“等待[某个同步对象]”和“等待线程终止”之间是不明确的。第一个答案。这个名称是从一个视觉上复制过来的,我相信它是从线程标准化之前编写的各种Unixy线程实现中复制过来的。