Трудность использования Python без стека, не может писать в диктовку - PullRequest
0 голосов
/ 25 мая 2010

У меня есть простой алгоритм отображения типа карты, который я хочу реализовать на python и использовать несколько ядер.

Я где-то читал, что потоки, использующие собственный модуль потоков в 2.6, не используют несколько ядер. это правда?

Я даже реализовал это с использованием Python без стека, однако я получаю странные ошибки [Обновление: быстрый поиск показал, что стек меньше не позволяет использовать несколько ядер Так есть ли у них другие альтернативы?]

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

Однако в приведенном выше коде значения, присвоенные метке, то есть изменению в словаре, теряются.

Вышеупомянутая функция распространения используется как вызываемая для MicroThreads (т.е. TaskLets)

1 Ответ

1 голос
/ 25 мая 2010

Используйте модуль multiprocessing стандартной библиотеки - он имитирует интерфейс модуля threading (для упрощения переноса существующего многопоточного кода) и может полностью использовать все имеющиеся у вас ядра. Потоки и без стеков являются одноядерными (и, действительно, без стеков не являются приоритетными, поэтому программирование для них совершенно отличается от программирования для многопоточности или многопроцессорной обработки).

...