Я пытаюсь использовать 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()
Код: Выделить всё
top
foo
top
foo
Возможные проблемы
Состояние гонки
Я подумал, что это может быть состояние гонки, и я не уменьшался каждый раз, но это не должно иметь значения, потому что функция должна вызываться сколько угодно раз
Глобальное состояние
Я устранил зависимость от глобального состояния, заставив рекурсивные вызовы происходить с некоторой случайной вероятностью. Он все еще зависает после двух вызовов.
Изменить: я использую Ubuntu 23
Подробнее здесь: https://stackoverflow.com/questions/787 ... is-hanging