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中执行特定任务_Python_Multithreading - Fatal编程技术网

如何使线程等待其他线程在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,这是为了进行模拟,我需要每个线程代表一个计算距离的传感器。谢谢,我认为这正是我所寻找的,它比我使用的(等待队列满)要好