Как в питоне вернуть из потока значение?

Рейтинг: 0Ответов: 1Опубликовано: 26.02.2023
import sys
import threading

def f(n):
    if n == 1:
        return 1
    else:
        return n * f(n - 1)

sys.setrecursionlimit(100000)
threading.stack_size(0x2000000)

t = threading.Thread(target=f, args=(2023,))
t1 = threading.Thread(target=f, args=(2020,))

t.start()
t1.start()

# здесь необходимо вернуть значение из потока и посчитать f(2023) / f(2020)

Возможно ли это? Если да, то как это реализовать?

Ответы

▲ 0Принят

Можно использовать concurrent.futures.ThreadPoolExecutor:

import sys
from concurrent.futures import ThreadPoolExecutor

pool = ThreadPoolExecutor()

def f(n):
    if n == 1:
        return 1
    else:
        return n * f(n - 1)

sys.setrecursionlimit(100000)

feature1 = pool.submit(f, 2023) # создаем поток для вычисления факториала
feature2 = pool.submit(f, 2020)

result1 = feature1.result() # забираем результат вычисления
result2 = feature2.result()

result = result1/result2
print(result)