Question

Je algorithme simple de type carte-reduce, que je veux mettre en œuvre en python et faire usage de plusieurs noyaux.

J'ai lu quelque part que les threads en utilisant le module natif des threads 2.6 ne faites pas l'utilisation de plusieurs noyaux. 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 Il en va de 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 à l'étiquette, qui est le changement dans le dictionnaire sont perdus.

Ci-dessus, la fonction propagation est utilisée comme appelable pour microfiletages (à savoir tasklets)

Était-ce utile?

La solution

Utilisation du module multitraitement de la norme bibliothèque - il imite l'interface du module threading (pour faciliter le portage d'un code multithread existant) et peuvent utiliser pleinement tous les noyaux que vous avez. filetage et stackless sont tous les deux un seul noyau (et en effet, stackless est non préemptif, la programmation de sorte car il est bien différent de celui de la programmation de chaque filetage ou multitraitement).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top