Как поставить в очередь 3 зависимые функции, используя потоки и очереди - PullRequest
0 голосов
/ 30 июня 2018

У меня есть 3 функции, которые мне нужно запустить. Каждая функция генерирует определенный вывод, от которого зависит следующая функция. В общем, как только первый завершается только тогда, я могу перейти ко второму, но как только второй запустится, я могу снова запустить первый, чтобы сгенерировать следующий пакет данных - поэтому я хочу запустить их оба на в то же время, но я не могу запустить второй, прежде чем я закончу первый, и третий, прежде чем я закончу второй. Но я могу запустить первое и второе, пока работает третье. Как я могу реализовать это с помощью потоков в Python? Я понимаю основы многопоточности, но не знаю, как создать для этого очередь.

Это пример того, что мне нужно сделать:

# This is what will usually happen without threading. How can I implement the
# same thing but with threading? Keep in mind that foo() 1, 2 and 3
# take some amount of time. And foo2() may finish before foo() finished
# generating data, so I can't run foo2() until I have the data from foo()

# foo generates the data for foo2
data = foo()
# foo2 generates data for foo3
data2 = foo2(data)
# foo3 does something with data2 and the data is no longer used
foo3(data2)

1 Ответ

0 голосов
/ 01 июля 2018

Прочитав комментарии к вашим вопросам, я немного больше поискал. Я понимаю, что вы ищете какой-то паттерн Конвейера. И кажется, что в Python есть что-то для этого. Ответ на вопрос в ссылке также говорит о том, что @Peterwood сказал об использовании очередей. Как спроектировать шаблон асинхронного конвейера в python

...