У меня есть много данных Монте-Карло, которые мне нужно обработать в конкретном кластере. Что я делаю, так это для данного образца данных (который в среднем имеет размер 70 ГБ) я запускаю некоторый статистический скрипт на python для этих данных и сохраняю его в файле hdf5, что уменьшает общий размер этих данных. на 90%.
Я мало что могу сделать, чтобы ускорить работу программы, поскольку файлы такие огромные. Из-за этого для завершения прогона каждого образца требуется много времени.
Чтобы ускорить общую обработку, я запускаю следующую команду
cat sampleList.txt | parallel -j 20 ipython myScript.py 2>&1 | tee logDir/myLog.txt
где доступное количество ядер - 36.
Однако со временем происходит автоматическое завершение определенного числа из этих 20 процессов. У меня не обязательно проблемы с этим. Однако, когда один из этих процессов останавливается, файл hdf5, записываемый в этом процессе, становится поврежденным.
Мне было интересно, можно ли иметь в моем скрипте Python флаг, который заставлял бы данные, которые я написал, закрываться, прежде чем процесс будет завершен. Или, может быть, у вас есть альтернативы получше.
Что я должен делать? И спасибо!
Имеет ли смысл закрывать файл после каждой записи:
while input
compute
if received TERM signal: exit
open >>file.hd5
write stuff
close file.hd5