Скажем, у меня есть исполнитель пула потоков с макс. 10 нитей, и я представить задачу к ней, которая сама по себе создает другую задачу, и в свою очередь, ждет его завершения, рекурсивно, пока не достигают глубины 11Пулы потоков Python - задачи, которые создают подзадачи и ждут от них
Пример кода в Python:
import concurrent.futures
e = concurrent.futures.ThreadPoolExecutor(max_workers=10)
def task(depth):
print 'started depth %d' % (depth,)
if depth > 10:
return depth
else:
f = e.submit(task, depth + 1)
concurrent.futures.wait([f])
f = e.submit(task, 0)
print f.result()
выше выходов кода:
started depth 0
started depth 1
started depth 2
started depth 3
started depth 4
started depth 5
started depth 6
started depth 7
started depth 8
started depth 9
и взаимоблокировки.
Есть ли способ решить эту проблему без создания дополнительных потоков и исполнителей?
Другими словами, путь для рабочих потоков для работы над другими задачами в ожидании?
http://stackoverflow.com/questions/1239035/asynchronous-method-call-in-python –
Или еще лучше пойти с высоким уровнем решения, как сельдерей HTTP://www.celeryproject.org/ –
Не заходит в тупик, потому что он продолжает вызывать новые потоки, но максимальное количество в пуле - только 10. Ни один из нитей не заканчивает свою задачу. – Alexander