2013-11-25 57 views
-1

•假設您有一個包含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) 
+0

您應該聽取錯誤消息。 – Jonast92

+1

歡迎來到Stack Overflow!不要只用你能想到的每一個熱門標籤來標記你的問題。這是一個Python問題,只使用Python標籤。你沒有告訴我們你的文章中的錯誤,你可以用一句話來完成。 –

+0

對不起,,,,這是我的第一個問題 –

回答

2

要導入_thread代替thread,刪除下劃線。刪除_thread.start_new_thread()行的下劃線。

通常,不要使用以下劃線開頭的模塊,它們是內部實現細節。

+0

對不起,這是我的第一個問題在這裏:)我刪除它,它仍然提示我與相同的錯誤 –

+0

因此,你現在有'進口線程'和使用*只有*'線程'在整個代碼? –

+0

是的!我做到了現在它告訴我:locks [i] = thread.allocate_locks() AttributeError:'模塊'對象沒有屬性'allocate_locks' –

相關問題