并行解决方案搜索

时间:2015-04-15 01:20:41

标签: python python-multiprocessing

我使用多处理包在python中编写了一些代码。它有点以6种不同的方式搜索方程的解。所以我有6个不同的进程运行相同的函数和不同的参数。我希望在其中一个子进程找到解决方案后停止所有子进程。现在使用join函数后,结果是即使找到解决方案,其他进程也会继续,直到它们找一个 。我使用了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。

1 个答案:

答案 0 :(得分:0)

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

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

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