У меня есть простая main()
функция, которая обрабатывает огромное количество данных.Поскольку у меня 8-ядерный компьютер с большим количеством оперативной памяти, мне было предложено использовать модуль multiprocessing
python для ускорения обработки.Каждый подпроцесс займет около 18 часов.
Короче говоря, я сомневаюсь, что правильно понял поведение модуля multiprocessing
.
Я как-то запускаю разные подпроцессы, как это:
def main():
data = huge_amount_of_data().
pool = multiprocessing.Pool(processes=cpu_cores) # cpu_cores is set to 8, since my cpu has 8 cores.
pool.map(start_process, data_chunk) # data_chunk is a subset data.
Я понимаю, что запуск этого скрипта - это отдельный процесс, а именно основной процесс, который завершается после завершения всех подпроцессов.Очевидно, что основной процесс не потребляет много ресурсов, поскольку он сначала только подготавливает данные и порождает подпроцессы. Будет ли оно также использовать ядро для собственного использования? То есть сможет запускать только 7 подпроцессов вместо тех 8, которые мне нравилось начинать выше?
Основной вопрос: могу ли я порождать8 подпроцессов и быть уверенным, что они будут работать правильно параллельно друг другу?
Кстати, подпроцессы никак не взаимодействуют друг с другом, и когда они завершаются, каждый из них генерирует файл базы данных sqlite.где они хранят результаты.Поэтому даже result_storage обрабатывается отдельно.
Чего я хочу избежать, так это того, что я запускаю процесс, который будет мешать другим работать на полной скорости.Мне нужно, чтобы код заканчивался примерно в 16 часов, а не в два раза, потому что у меня больше процессов, чем ядер.: -)