Не совсем понятно, почему ваш ноутбук выключается. Это может быть плохая комбинация «недостаточно памяти» и «дескрипторов файла» (вы порождаете множество процессов, и каждый открывает 3 файла, да?) И, возможно, ошибка в вашей ОС или сбой какого-либо оборудования.
В любом случае вы можете попытаться избежать этого, просто уменьшив количество порождаемых процессов. Прежде всего, нет никакой выгоды от запуска процесса на файл. Эмпирическое правило: никогда не создавайте больше, чем, скажем, [3 x число ядер] параллельных функций (обычно достаточно [количество ядер], когда вы выполняете задачи с исключительно интенсивной загрузкой процессора, но у вас есть небольшое количество операций ввода-вывода). а также).
Так что вместо
files = [f for f in glob.glob("data/*.tar", recursive=True)]
procs = []
for index, f in enumerate(files):
proc = Process(target=main, args=(index, f,))
procs.append(proc)
proc.start()
for proc in procs:
proc.join()
попробуйте это
from multiprocessing import Pool, cpu_count
pool = Pool(2*cpu_count()) # or 3, do some empirical testing
files = [f for f in glob.glob("data/*.tar", recursive=True)]
procs = []
for index, f in enumerate(files):
pool.apply_async(main, (index, f,))
pool.close()
pool.join()
Подробнее о пулах здесь: https://docs.python.org/2/library/multiprocessing.html#using-a-pool-of-workers
Если вывы используете Python3.x, вы также можете попробовать исполнителей: https://docs.python.org/3/library/concurrent.futures.html