07 Июл 2023
2 мин
1150

Получение возвращаемого значения из потока в Python

При работе с многопоточностью в Python часто возникает задача получения возвращаемого значения из потока. Однако, стандартный подход к этому вопросу,

Содержание

При работе с многопоточностью в Python часто возникает задача получения возвращаемого значения из потока. Однако, стандартный подход к этому вопросу, используя метод thread.join(), не дает ожидаемого результата. Вместо возвращаемого значения функции, этот метод возвращает значение None.

Рассмотрим пример кода на Python, где создается поток, выполняющий функцию, и пытается получить ее возвращаемое значение:

from threading import Thread

def foo(bar):
    print('hello {}'.format(bar))
    return 'foo'

thread = Thread(target=foo, args=('world!',))
thread.start()
return_value = thread.join()

В данном случае переменная return_value будет равна None, а не ‘foo’, как можно было бы ожидать.

Однако, есть несколько способов обойти данное ограничение. Один из них — использовать модуль concurrent.futures стандартной библиотеки Python для создания потока и получения возвращаемого значения.

from concurrent.futures import ThreadPoolExecutor

def foo(bar):
    print('hello {}'.format(bar))
    return 'foo'

with ThreadPoolExecutor() as executor:
    future = executor.submit(foo, 'world!')
    return_value = future.result()

В этом примере executor.submit() запускает функцию foo в отдельном потоке и возвращает объект Future, который представляет собой возможное будущее значение. Метод future.result() используется для получения возвращаемого значения функции, когда оно становится доступным.

Такой подход позволяет избавиться от проблемы получения возвращаемого значения из потока в Python.

Содержание

Добавить комментарий

Определи профессию по рисунку