我有大量蒙特卡罗数据需要在特定集群上处理。我的做法是,对于给定的数据样本(平均大小为 70 GB),我使用 Python 对这些数据运行一些统计脚本,并将其保存到 hdf5 文件中,这样可以将这些数据的整体大小减少 90%。
由于文件太大,我无法采取太多措施来加快程序速度。因此,每个样本运行完毕所需的时间都很长。
为了加快整体处理速度,我运行以下命令
cat sampleList.txt | parallel -j 20 ipython myScript.py 2>&1 | tee logDir/myLog.txt
其中可用核心数为 36。
但最终发生的事情是,随着时间的推移,这 20 个进程中的一定数量会自动终止。我对此并没有什么意见。但是,当其中一个进程被终止时,该进程中写入的 hdf5 文件就会损坏。
我想知道是否可以在我的 Python 脚本中添加一个标志,强制在进程终止之前关闭我写入的数据。或者你们也许有更好的选择。
我该怎么办?谢谢!
答案1
每次写入后关闭文件是否有意义:
while input
compute
if received TERM signal: exit
open >>file.hd5
write stuff
close file.hd5