Stackless Pythonを使用するのが難しく、DICTに書き込むことができません
-
04-10-2019 - |
質問
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
モジュール(既存のマルチスレッドコードの移植を容易にするため)。すべてのコアを完全に使用できます。スレッドとスタックレスはどちらもシングルコアです(実際、スタックレスは非領土であるため、プログラミングのプログラミングは、スレッドまたはマルチプロセッシングのプログラミングとはまったく異なります)。
所属していません StackOverflow