tl; dr: использовать многопроцессорность
Звучит так, что A может занять> 10 раз больше времени, чем B. Если так, то просто используйте check_output . Пусть B терпеливо подождет, пока ребенок A отправит документ на стандартный вывод, затем вставит документ в БД.
В качестве альтернативы, возможно, A & B займет сравнимое количество времени, и пакетирование желательно. У вас есть куча заданий A, записывающих в /tmp/temp.${PID}
, затем mv
(os.rename()
) готовый файл в каталог /tmp/out/
. Пусть B периодически помещает такие файлы в БД, отсекая каждый из них по ходу.
В любом случае, вы будете жевать множество циклов ЦП, поскольку ваш for
l oop посещает множество входов, и вы хотел бы занять больше чем одно ядро. Введите многопроцессорность.
Преобразуйте ваш for
l oop в map
вызов, например: list(map(str, range(3)))
превратит [0, 1, 2]
в ['0', '1', '2']
. Конечно, ваша функция будет гораздо более интенсивной, чем str
.
Имея это в руках, вы в хорошей позиции, чтобы раскошелиться на группу детей, которые будут все запустить ту же функцию:
with multiprocessing.Pool() as p:
p.map(my_func, bunch_of_inputs)