J'ai un algorithme de type map-reduce simple, que je veux implémenter en python et utiliser plusieurs cœurs.Difficulté à utiliser python sans pile, impossible d'écrire dans un dict
J'ai lu quelque part que les threads utilisant le module de thread natif dans 2.6 n'utilisent pas plusieurs cœurs. Est-ce vrai?
J'ai même mis en œuvre à l'aide de python stackless mais je reçois dans des erreurs étranges [Mise à jour: une recherche rapide a montré que la pile moins ne permet à plusieurs noyaux Ainsi sont leur toute autre alternative?]
def Propagate(start,end):
print "running Thread with range: ",start,end
def maxVote(nLabels):
count = {}
maxList = []
maxCount = 0
for nLabel in nLabels:
if nLabel in count:
count[nLabel] += 1
else:
count[nLabel] = 1
#Check if the count is max
if count[nLabel] > maxCount:
maxCount = count[nLabel];
maxList = [nLabel,]
elif count[nLabel]==maxCount:
maxList.append(nLabel)
return random.choice(maxList)
for num in range(start,end):
node=MapList[num]
nLabels = [Label[k] for k in Adj[node]]
if (nLabels!=[]):
Label[node] = maxVote(nLabels)
else:
Label[node]=node
Cependant, dans le code ci-dessus, les valeurs attribuées à Label, c'est-à-dire le changement de dictionnaire, sont perdues.
Au-dessus de la fonction de propagation est utilisé comme appelable pour microfiletages (c.-à-tasklets)
Spécifiquement, multiprocessing.map() est _incredibly_ utile. – carl