Я пытался включить многопоточность в свой код, который вычисляет сумму чисел Фибоначчи, индекс которых задается случайно сгенерированным массивом чисел. В массиве 10000 чисел. Проблема в том, что этот код не работает для 10 000 номеров, но иногда работает для 1000 номеров.
import random, threading
arr = []
def fibo(num, cache = {1:1, 2:1}):
if num not in cache:
cache[num] = fibo(num-1, cache) + fibo(num-2, cache)
return cache[num]
def rand():
global arr
arr = [random.randrange(1, 21) for _ in range(10000)]
def func(arr):
fibo_arr = []
fibo_arr = [fibo(n) for n in arr]
print(f'Sum: {sum(fibo_arr)}')
if __name__ == "__main__":
x = threading.Thread(target=rand)
x.start()
y = threading.Thread(target = func, args = (arr,))
y.start()
x.join()
y.join()
Почему код работает только для определенного диапазона c и это тоже с несогласованностью? Есть ли лучший способ сделать это с помощью синхронизации?