Schwierigkeit stackless Python verwendet wird, kann nicht auf eine dict schreiben
-
04-10-2019 - |
Frage
Ich habe einfache Karten reduzieren Typ-Algorithmus, die ich in Python und nutzen mehrere Kerne implementieren möchten.
Ich habe irgendwo gelesen, dass Threads native Thread-Modul in 2.6 Sie nicht nutzen mehrere Kerne. ist das wahr?
Ich setzte es sogar stackless Python aber ich in seltsame Fehler bin immer [Update: eine schnelle Suche ergab, dass der Stapel weniger nicht mehr Kerne nicht erlaubt So sind ihre noch andere Alternativen?]
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
Jedoch in obigem Code der zu Label zugewiesenen Werte, die die Änderung im Wörterbuch ist verloren.
Above Fortpflanzungsfunktion wird als aufrufbare für Mikrogewinde verwendet (d.h. Tasklets)
Lösung
Mit dem Multiprozessing Modul des Standard Bibliothek - es ahmt die Schnittstelle des threading
Modul (zur Erleichterung der bestehenden multithreaded Code Portierung) und alle Kerne voll nutzen können Sie haben. Threading und stackless sind sowohl Single-Core (und in der Tat, stackless ist nicht präemptiven, so Programmierung für sie ist ganz anders als für beide Einfädeln oder Multiprocessing als Programmierung).