并行解决方案搜索

Parallel Solution search

我在 python 中使用多处理包编写了一些代码。它在 6 个不同的 ways.So 中搜索方程的解 我有 6 个不同的过程 运行 具有不同参数的相同函数。我想在使用 join 函数后,一旦子 process.Right 之一找到解决方案,我想停止所有子进程,结果是即使找到解决方案,其他进程继续,直到他们找到一个。我正在使用 join() 。

for i in range(N):
                    p=multiprocessing.Process(target=mysolver,args=(g,h,q,B[i],i,dic,))
                    jobs.append(p)
                    p.start()

            for p in jobs:
                    p.join()

这就是我调用求解函数的方式。通常 N 为 6 -10 .

您需要一个包含对所有线程的引用并可供所有线程访问的列表。这个线程列表应该在你启动线程之前准备好。最先找到解决方案的线程可以使用列表杀死其他线程,注意不要自杀。

如果其中一个线程在您调用 join 之前死亡,您可能会遇到竞争情况。因此,您可能会在一个已经死掉的线程上调用 join。一个快速而肮脏的解决方法是让每个线程等待主线程几毫秒以调用所有线程的连接。

另一种更简洁的解决方案是使用所有线程在寻找解决方案时检查的标志。如果他们发现这是真的,他们应该立即通过 returning 终止。找到解决方案的线程可以将标志设置为 true 和 return。现在所有线程都会很好地加入主线程。