Po uruchomieniu mówi mi to: NameError: nazwa 'lock' nie jest zdefiniowana?

• Załóżmy, że masz tablicę (data = []) zawierającą 500 000 elementów i każdemu elementowi przypisano losową wartość od 1 do 10 (random.randint (1,10)).

dla i w zakresie (500000): data [i] = random.randint ()

• Pozwól użytkownikom określić liczbę wątków roboczych (N). Użytkownik może wprowadzić wartość z przedziału od 1 do 10. Niepoprawne wartości powinny spowodować wyświetlenie komunikatu ostrzegawczego, a liczba wątków zostanie ustawiona na 5. • Opracuj metodę automatycznego podziału tablicy na N równych segmentów, gdzie N jest liczbą pracowników wątki (threadCount). Nie można tworzyć podwarstw, aby poradzić sobie z tym problemem; musisz wypracować metodę partycjonowania oryginalnej tablicy na podstawie indeksów. Podpowiedź jest podana poniżej, zakładając, że użytkownik wprowadził wątek 4.

Segment 1 (125 000 elementów) Segment 2 (125 000 elementów) Segment 3 (125 000 elementów) Segment 4 (125 000 elementów)

• Określ metodę wywoływania wątków, aby każdemu wątkowi przypisany był segment tablicy, na którym chcesz działać. Wątki te powinny tworzyć sumę elementów dla przydzielonego segmentu. Prototyp funkcji z jednym wątkiem podano poniżej:

sumowanie def (st, end, threadIndex):

gdzie: koniec i koniec reprezentują punkt początkowy i końcowy segmentu tablicy, a indeks jest numerem wątku.

Musisz określić mechanizm blokujący, aby upewnić się, że program może działać jednocześnie na tablicy.

• Po zakończeniu pracy przez każdy wątek program główny powinien obliczyć średnią końcową, sumując podsumy i nurkując według łącznej liczby elementów tablicy.

Ćwiczenie końcowe: Czy możesz rozszerzyć swój program tak, aby tablica była wypełniana losowymi liczbami przy użyciu wątków roboczych? Mój kod:

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 the number of working threads:"))

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)

questionAnswers(2)

yourAnswerToTheQuestion