Python ThreadPoolExecutor: как отправить внутри отправленной функции ⇐ Python

Программы на Python
Anonymous
Python ThreadPoolExecutor: как отправить внутри отправленной функции

Сообщение Anonymous »

Я использую библиотеку Python concurrent.futures с ThreadPoolExecutor и хочу отправить данные внутри отправленной функции. Следующий код представляет собой минимальный пример попытки отправить f2 внутри отправленного f1:

Код: Выделить всё

import concurrent.futures

def f2():
print("hello, f2")

def f1():
print("hello, f1")
executor.submit(f2)

with concurrent.futures.ThreadPoolExecutor(16) as executor:
executor.submit(f1)
Вывод (Python 3.12):

Код: Выделить всё

hello, f1
Вывод тот же, даже если:

Код: Выделить всё

import concurrent.futures

def f2():
print("hello, f2")
return 3

def f1():
print("hello, f1")
print(executor.submit(f2).result())

with concurrent.futures.ThreadPoolExecutor(16) as executor:
executor.submit(f1)
Но этот код работает:

Код: Выделить всё

import concurrent.futures

def f2():
print("hello, f2")
return 3

def f1():
print("hello, f1")
return executor.submit(f2).result()

with concurrent.futures.ThreadPoolExecutor(16) as executor:
print(executor.submit(f1).result())
Выход:

Код: Выделить всё

hello, f1
hello, f2
3
Почему f2 не вызывается в примере 1?
Обновление:
Без with, вывод примера 1 является случайным (т.е. иногда выводит hello, f2, а иногда нет)

Подробнее здесь: https://stackoverflow.com/questions/790 ... -submitted

Вернуться в «Python»