Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.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_Python Multiprocessing - Fatal编程技术网

Python 并行解搜索

Python 并行解搜索,python,python-multiprocessing,Python,Python Multiprocessing,我已经使用多处理包用python编写了一些代码。它可以用6种不同的方法来搜索方程的解,所以我有6个不同的进程,用不同的参数运行同一个函数。我希望在其中一个子进程找到解决方案后停止所有子进程。现在使用连接函数后,结果是,即使找到了解决方案,其他进程也会继续,直到找到解决方案为止。我正在使用join() 这就是我调用函数求解的方法。通常N是6-10。您需要一个列表,其中包含对所有线程的引用,并且所有线程都可以访问该列表。此线程列表应在启动线程之前准备就绪。首先找到解决方案的线程可以使用该列表杀死其他

我已经使用多处理包用python编写了一些代码。它可以用6种不同的方法来搜索方程的解,所以我有6个不同的进程,用不同的参数运行同一个函数。我希望在其中一个子进程找到解决方案后停止所有子进程。现在使用连接函数后,结果是,即使找到了解决方案,其他进程也会继续,直到找到解决方案为止。我正在使用join()


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

您需要一个列表,其中包含对所有线程的引用,并且所有线程都可以访问该列表。此线程列表应在启动线程之前准备就绪。首先找到解决方案的线程可以使用该列表杀死其他线程,从而避免自杀

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


另一种更干净的解决方案是使用一个标记,当所有线程寻找解决方案时,该标记都会被检查。如果他们发现这是真的,他们应该立即终止返回。找到解决方案的线程可以将标志设置为true并返回。现在所有线程都将很好地连接主线程。

process.join()
将等待进程完成,
process.terminate()
可能对您更有用。我仍然希望调用函数等待其中一个进程完成。有没有一种方法可以只用process.terminate()来实现这一点?请给出一个最简单的代码示例作为起点。应该有一种方法等待其中一个函数的结果,然后杀死其他函数。
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()