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