Pregunta

Tengo algoritmo de tipo Mapa-reducir simple, que quiero poner en práctica en Python y hacer uso de múltiples núcleos.

He leído en alguna parte que los hilos utilizando el módulo hilo nativo en 2.6 No haga uso de múltiples núcleos. ¿es cierto?

Incluso la implementó usando Python sin apilado sin embargo estoy metiendo errores extraños [Actualización: una búsqueda rápida mostró que la pila menos no permite que múltiples núcleos También lo son sus otras alternativas?]

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

Sin embargo, en el código de los valores asignados a la etiqueta, que es el cambio en el diccionario se pierden.

Por encima de función Propagar se utiliza como exigible para microhilos (es decir, tasklets)

¿Fue útil?

Solución

Utilice el multiprocesamiento módulo de la norma biblioteca - imita la interfaz del módulo threading (para facilitar la portabilidad de código multiproceso existente) y pueden hacer pleno uso de todos los núcleos que tiene. roscado y sin apilado son ambos de un solo núcleo (y de hecho, sin pérdida de velocidad es no preferente, por lo que la programación para que es bastante diferente de programación, ya sea para roscar o multiprocesamiento).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top