私は現在、グラフと元のノードを入力として受け取り、グラフ内のすべてのノードとツリー (各ノードの先例) のコストを返す最短経路アルゴリズムを持っています。グラフは辞書であり、コストとツリーも同様です。
すべてのノードに起点を持つ最短パス ツリーを計算する必要があるため、(ツリーは互いに独立しているため) 並列で実行するのが自然です。
マルチプロセッシングを使用し、結果をリストに追加するワーカーのプールを使用してそれを行っています(辞書のリストが必要です)。
エラーなしで実行されますが、興味深いのは、処理時間がワーカーの数によって変化しないことです (まったく変化しません)。
なぜそれが起こるのかについての洞察は、ほとんど高く評価されます。コードは以下のとおりです。
from LoadData import *
from ShortestPathTree import shortestPath
from time import clock, sleep
from multiprocessing import Pool, Process, cpu_count, Queue
def funcao(G,i):
costs, pred=shortestPath(G,i)
return pred
def main():
#loads the graph
graph="graph.graph"
G = load_graph(graph)
# loads the relevant nodes (CENTROIDS)
destinations="destinations.graph"
DEST = load_relevant_nodes(destinations)
f = open('output_parallel.out','w')
start=clock()
pool=Pool()
resultados=[]
def adder(value):
resultados.append(value)
#for i in range(len(DEST)):
for i in range(486):
pool.apply_async(funcao, args=(G,DEST[i]), callback=adder)
pool.close()
pool.join()
print clock()-start
print >> f, resultados
print >> f, 'seconds: '+ str(clock()-start)