如何使线程等待其他线程在python中执行特定任务
我有多个线程执行相同的任务:计算一个距离并将其放入一个列表中,每个线程需要将其与其他线程进行比较并执行特定任务。如何使线程等待其他线程在python中执行特定任务,python,multithreading,Python,Multithreading,我有多个线程执行相同的任务:计算一个距离并将其放入一个列表中,每个线程需要将其与其他线程进行比较并执行特定任务。 如何让一个线程等待其他线程完成任务(在这种情况下,让其他线程跟踪连接将不起作用)您需要的东西有一个名称,它被称为屏障。我对Python生态系统的了解还不够,不知道是否有现成的生态系统可以直接使用,但下面是它的内容: 它是一个包含计数(最初大于零)和条件变量的对象。它有一个方法,await() await()方法递减计数,然后 它向条件变量发送信号,并在计数变为零时返回,或 它等待条
如何让一个线程等待其他线程完成任务(在这种情况下,让其他线程跟踪连接将不起作用)您需要的东西有一个名称,它被称为
屏障。我对Python生态系统的了解还不够,不知道是否有现成的生态系统可以直接使用,但下面是它的内容:
它是一个包含计数(最初大于零)和条件变量的对象。它有一个方法,await()
await()
方法递减计数,然后
- 它向条件变量发送信号,并在计数变为零时返回,或
- 它等待条件变量,直到计数等于零,然后返回
如果您使用count=N初始化一个屏障,然后使用N个线程await()
初始化它,则在所有线程“到达屏障”(即调用await()
)之前,所有线程都不会“越过屏障”(即从await()
)返回)
Barrier
通常作为CyclicBarrier
实现,这与附加功能相同,即当Barrier打开时,它会自动将计数重置为其原始值
更新:Python3(3.2版及更高版本)的标准库中有一个threading.Barrier
类
为什么不在线程完成后终止它?然后,您可以等待所有工作人员完成并打开新线程来处理结果。我不知道这是否对你有好处,因为你没有解释任务是什么,或者你的代码是什么。我需要同一个线程来继续其他任务进行模拟。在一个使用多个线程进行计算的程序中,“我需要同一个线程来…”,设计程序通常是一个明智的想法,这样当有工作要做时,哪个线程执行工作并不重要,但是……如果您使用的是标准Python实现,那么使用多个线程进行计算对性能没有任何好处,因为存在。正如我所说的@jameslarge,这是为了进行模拟,我需要每个线程代表一个计算距离的传感器。谢谢,我认为这正是我所寻找的,它比我使用的(等待队列满)要好