Многопоточность не работает для некоторых больших входов - PullRequest
0 голосов
/ 19 июня 2020

Я пытался включить многопоточность в свой код, который вычисляет сумму чисел Фибоначчи, индекс которых задается случайно сгенерированным массивом чисел. В массиве 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 и это тоже с несогласованностью? Есть ли лучший способ сделать это с помощью синхронизации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...