صعوبة في استخدام الثعبان بدون تكديس ، لا يمكن الكتابة إلى قول
-
04-10-2019 - |
سؤال
لدي خوارزمية نوع بسيطة من نوع الخريطة ، والتي أريد تنفيذها في بيثون والاستفادة من النوى المتعددة.
قرأت في مكان ما أن المواضيع باستخدام وحدة الخيط الأصلي في 2.6 لا تستفيد من النوى المتعددة. هل هذا صحيح؟
حتى أنني قمت بتطبيقه باستخدام ثعبان بدون تكديس ، لكنني أخطأ في أخطاء غريبة [تحديث: أظهر البحث السريع أن المكدس أقل لا يسمح بنوى متعددة ، لذا فهي أي بدائل أخرى؟
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 (أي بالمغارات)
المحلول
استخدم ال المعالجة متعددة وحدة المكتبة القياسية - تحاكي واجهة threading
الوحدة النمطية (لتخفيف نقل التعليمات البرمجية المتعددة المؤشرات) ويمكن استخدامها بالكامل جميع النوى التي لديك. الخيوط وبلا تكديس كلاهما منفردة (وبالفعل ، لا تكديس غير مسمى ، لذلك فإن البرمجة لأنها تختلف تمامًا عن البرمجة إما للخيوط أو المعالجة المتعددة).