如何使线程等待其他线程在python中执行特定任务

时间:2018-05-30 15:30:06

标签: python multithreading

我有多个线程做同样的工作:计算距离并将其放在列表中,而不是每个线程需要将其与其他线程进行比较并执行某项任务。 我如何让一个线程等待其他人完成任务(并且让其他人跟进连接的任务在这种情况下不起作用)

1 个答案:

答案 0 :(得分:1)

有一个你想要的名字,它被称为Barrier。我不太了解Python生态系统,知道是否有一个现成的,你可以使用,但这就是它:

它是一个包含计数(最初大于零)的对象,以及一个条件变量。它有一个方法await()

await()方法递减计数,然后;

  • 它表示条件变量,如果计数变为零,则返回,或
  • 等待条件变量,直到计数等于零,然后然后返回。

如果你使用count = N初始化一个障碍,然后N个线程await(),那么没有一个线程会“越过障碍”(即从await()返回)直到所有线程已“到达障碍”(即称为await())。

Barrier通常被实现为CyclicBarrier,这与附加功能相同,它会在屏障打开时自动将计数重置为其原始值。

更新:Python3的标准库中有一个threading.Barrier类(v.3.2及更高版本)。

https://docs.python.org/3/library/threading.html#barrier-objects