•假設您有一個包含500,000個元素的數組(data = []),並且每個元素都被分配了一個介於1和10之間的隨機值(random.randint(1,10))。當我運行該程序時,它告訴我「NameError:name'線程'未定義」我該怎麼辦?
爲i的範圍(500000): 數據[I] = random.randint()
•允許用戶確定(N)工作線程的數量。用戶可以輸入一個介於1和10之間的值。無效的值應該會產生一條警告消息,並將線程數設置爲5. •計算一個將數組自動分區爲N等分的方法,其中N是工作線程(threadCount)。你不能創建子數組來處理這個問題。您必須制定一種基於索引對原始數組進行分區的方法。一個提示如下假定用戶已經輸入的4
段1 (125,000元素)段2 (125,000元素)段3 (125,000元素)段4 (125,000元素)
一個THREADCOUNT提供•確定產生線程的方法,以便爲每個線程分配要操作的數組的一部分。這些線程應該爲其分配的段創建一個元素的總和。下面單線程函數原型給出:
DEF求和(ST,端,threadIndex):
其中:ST和結束代表陣列段的開始和結束點,並且索引是線程編號。
您必須確定鎖定機制以確保程序可以在陣列上同時運行。
•每個線程完成其工作後,主程序應該通過將子和和相加來計算最終的平均值,並將其與數組元素的總數相加。
最後的練習: 您可以擴展您的程序,以便使用您的工作線程填充隨機數字的數組?
我的代碼:
import random
import thread
def su(st,end,i):
global subtotal, data, locks
for index in range(st,end+i):
subtotal[i] += data[index]
lock.release()
numth = int(100)
data = list(range(numth))
for index in range(len(data)):
data[index] = random.randint(1,10)
wt=int(input("enter"))
locks = list(range(wt))
subtotal = list(range(wt))
seg = len(data)/wt
st=0
for i in range(wt):
st= i * seg
end = st *seg -1
thread.start_new_thread(su,())
locks=lock.acquire()
avg = sum(subtotal)/len(data)
print(avg)
您應該聽取錯誤消息。 – Jonast92
歡迎來到Stack Overflow!不要只用你能想到的每一個熱門標籤來標記你的問題。這是一個Python問題,只使用Python標籤。你沒有告訴我們你的文章中的錯誤,你可以用一句話來完成。 –
對不起,,,,這是我的第一個問題 –