我有一个有向图,我必须找到从给定节点集传递的最短路径。为此,我正在寻找这个集合的排列,并且对于每个集合,我计算总和每对节点之间的最短路径的长度。我有一个变量计算到目前为止发现的最短排列和长度。
在我必须处理10个节点之前,我设法检查1s中的所有排列,之后出现了瓶颈,因此我想使用multiprocessing.Pool()。
问题是我必须读取和编写调用Pool.imap的类的变量。
这是我在没有多处理/多线程的情况下使用的代码。
此代码包含在类Area的createRoute(self)方法中。
#This returns a list of nodes as integers
binsToEmpty = self.calculateBinsToEmpty()
minLength = float("inf")
minPath = None
allPermutationsOfPaths = permutations(binsToEmpty)
for p in allPermutationsOfPaths:
readElem = iter(p)
next(readElem)
length = 0
for a,b in izip(p, readElem):
if length < minLength:
#getShortestLength returns an integer
length += self.getSorthestLength(a._id, b._id)
else:
break
#Every path starts and ends at node 0 which is not included in the permutation
length += self.getSorthestLength(0, p[0]._id)
length += self.getSorthestLength(p[-1]._id, 0)
if length < minLength:
minLength = length
minPath = p
我试图从类似的问题中找出解决方法,但我还没有理解如何实现它。