我目前在一个SGE集群上工作,有一段代码可以并行提交许多用python编写的作业
代码末尾的输出是一组包含数字数据的文件。每个python作业执行一些计算,然后依次输出到每个文件。为了输出到文件,我的代码读取文件中的数据,将计算出的数据添加到数据中,然后输出回文件
我的问题是,;因为所有作业都是并行运行的,并且所有作业都对每个输出文件有贡献;我的工作相互冲突。我经常在文件大小不兼容等方面出错。我认为原因是,有时两个作业会在同一时间尝试读取文件,并且会发生冲突
我的问题是:当并行运行(可能有许多)多个作业时,每个作业都会多次对同一个文件作出贡献,是否有一种良好的实践方法来确保它们不会同时写入文件?这个问题有什么pythonic或SGE解决方案吗
我的想法是创建一个txt文件,其中包含一个1
或0
指示当前是否正在访问文件,并且作业仅在值设置为0
时才会写入文件,并且在输出时将值更改为1
。这种做法不好吗?/愚蠢的想法
通过将每个并行进程写入一个单独的文件,可以使设计保持简单。然后,当所有流程完成后,让最终流程收集所有结果并将它们合并到单个输出文件中。这是HPC处理管道的常见模式
确保跨多个线程(即在同一进程中并行运行的任务)安全的常见做法是使用mutex。由于这将在多个进程中运行,因此需要在进程外部获取锁
您所描述的解决方案是锁定机制的精简版本。您可以通过创建
file1.txt.lock
来存储值或文件,例如锁file1.txt
,并确保在写入file1.txt
之前不存在此类文件但是,由于这是一个常见问题,因此已经有几种文件锁定机制可用,包括python中的文件锁定机制
根据thispost,您可以获得如下文件锁定:
请查看评论和其他答案,以找到替代解决方案,了解如何最好地为您特定需要的文件获取锁
相关问题 更多 >
编程相关推荐