【发布时间】:2014-12-10 20:49:39
【问题描述】:
我想对图形着色进行同步模拟。为了创建图形(树),我使用igraph 包和同步我第一次使用multiprocessing 包。我构建了一个图,其中每个节点都有属性:label、color 和 parentColor。为了给树着色,我执行了以下函数(我没有给出完整的代码,因为它很长,我认为没有必要解决我的问题):
def sixColor(self):
root = self.graph.vs.find("root")
root["color"] = self.takeColorFromList(root["label"])
self.sendToChildren(root)
lista = []
for e in self.graph.vs():
lista.append(e.index)
p = multiprocessing.Pool(len(lista))
p.map(fun, zip([self]*len(lista), lista),chunksize=300)
def process_sixColor(self, id):
v = self.graph.vs.find(id)
if not v["name"] == "root":
while True:
if v["received"] == True:
v["received"] = False
#------------Part 1-----------
self.sendToChildren(v)
self.printInfo()
#-----------Part 2-------------
diffIdx = self.compareLabelWithParent(v)
if not diffIdx == -1:
diffIdxStr = str(bin(diffIdx))[2:]
charAtPos = (v["label"][::-1])[diffIdx]
newLabel = diffIdxStr + charAtPos
v["label"] = newLabel
self.sendToChildren(v)
colorNum = int(newLabel,2)
if colorNum in sixColorList:
v["color"] = self.takeColorFromList(newLabel)
self.printGraph()
break
我希望每个节点(除了根节点)都并行同步调用函数process_sixColor,并且不会在所有节点生成Part 1 之前评估Part 2。但我注意到这无法正常工作,并且某些节点正在评估,然后每个其他节点将执行Part 1。我该如何解决这个问题?
【问题讨论】:
标签: python python-2.7 synchronization multiprocessing igraph