質問

Pythonで実装し、複数のコアを使用したいシンプルなMap-Reduceタイプアルゴリズムがあります。

2.6のネイティブスレッドモジュールを使用してスレッドが複数のコアを使用しないでください。本当?

Stackless Pythonを使用して実装しましたが、奇妙なエラーになります[更新:Stack Lessが複数のコアを許可しないことがわかりました。

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

ただし、上記のコードでは、ラベルに割り当てられた値をコードします。つまり、辞書の変更は失われます。

上記の伝播関数は、マイクロスレッド(すなわちタスクレット)に呼ばれるものとして使用されます

役に立ちましたか?

解決

使用 マルチプロセッシング 標準ライブラリのモジュール - のインターフェイスを模倣します threading モジュール(既存のマルチスレッドコードの移植を容易にするため)。すべてのコアを完全に使用できます。スレッドとスタックレスはどちらもシングルコアです(実際、スタックレスは非領土であるため、プログラミングのプログラミングは、スレッドまたはマルチプロセッシングのプログラミングとはまったく異なります)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top