Рекурсивное использование ProcessPoolExecutor зависаетPython

Программы на Python
Anonymous
Рекурсивное использование ProcessPoolExecutor зависает

Сообщение Anonymous »

Проблема
Я пытаюсь использовать ProcessPoolExecutor с рекурсивными вызовами, но это не работает. Ниже я создал минимальный пример

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

from concurrent.futures import ProcessPoolExecutor
from time import sleep

executor = ProcessPoolExecutor()
i = 3

def test():
global i
print("top")
if i == 0:
print("bar")
return
else:
print("foo")
i -= 1
p = executor.submit(test)
print(p.result())
print(i)

test()
Я ожидаю, что i уменьшится, в пуле процессов будет выполнен рекурсивный вызов, а затем мы будем ждать результата. Это происходит рекурсивно до тех пор, пока i не достигнет 0, после чего вызовы каскадируются обратно. Однако этого не происходит. Я вижу следующий результат

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

top
foo
top
foo
в этот момент он зависает
Возможные проблемы
Состояние гонки
Я подумал, что это может быть состояние гонки, и я не уменьшался каждый раз, но это не должно иметь значения, потому что функция должна вызываться сколько угодно раз
Глобальное состояние
Я устранил зависимость от глобального состояния, заставив рекурсивные вызовы происходить с некоторой случайной вероятностью. Он все еще зависает после двух вызовов.
Изменить: я использую Ubuntu 23

Подробнее здесь: https://stackoverflow.com/questions/787 ... is-hanging

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