Question: USE PYTHON MULTI THREADING TO COMPLETE DO NOT USE PROCESSES ONLY COMPLETE PART 2 using MULTI THREADING 1) Basic version with two levels of threads
USE PYTHON MULTI THREADING TO COMPLETE DO NOT USE PROCESSES
ONLY COMPLETE PART 2 using MULTI THREADING
1) Basic version with two levels of threads (master and slaves)
One master thread aggregates and sums the result of n slave-threads where each slavethread sums a different range of values in an array of 1000 random integers (please program to generate 1000 random integers to populate the array).
************ONLY COMPLETE THIS PART BELOW***************
2) Advanced version with more than two levels of threads The master thread creates two slave-threads where each slave-thread is responsible to sum half segment of the array.
Each slave thread will fork/spawn two new slave-threads where each new slave-thread sums half of the array segment received by its parent. Each slave thread will return the subtotal to its parent thread and the parent thread aggregates and returns the total to its parent thread. Start with 7 nodes thread tree, when you are comfortable, you can extend it to a full thread tree.
USE THE CODE BELOW TO ASSIST WITH ADVANCED VERSION
import random import threading
def sum_array(arr, start, end, result): total = 0 for i in range(start, end): total += arr[i] result.append(total)
def parallel_sum(arr, num_threads): n = len(arr) chunk_size = n // num_threads threads = [] result = []
for i in range(num_threads): start = i * chunk_size end = start + chunk_size if i == num_threads - 1: end = n thread = threading.Thread(target=sum_array, args=(arr, start, end, result)) threads.append(thread) thread.start()
for thread in threads: thread.join()
return sum(result)
# Generate 1000 random integers arr = [random.randint(0, 1000) for _ in range(1000)]
# Test parallel_sum function with 4 threads print(parallel_sum(arr, 4))
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
