关于如何编写良好的Python LSF封装的建议
我正在创建一个Python的包装脚本,想知道怎么做比较好。
我想要按顺序运行代码。比如说:
第一步。
运行同一个程序(并行运行 - 因为我使用的是LSF系统,所以我只需提交三个不同的任务,这样并行化就很简单)。
我并行运行这个程序,每次运行都处理一个fin.txt文件,并输出一个fout.txt文件。也就是说,当它们都运行时,会从三个输入文件生成三个输出文件,分别是f1in.txt、f2in.txt、f3in.txt,输出文件是f1out.txt、f2out.txt、f3out.txt。
(在LSF系统中)每次程序成功运行后,会生成一个日志文件输出,分别是f1log.out、f2log.out、f3log.out。
这些日志文件的格式是这样的,如果f1log.out成功运行,它的内容大概会是这样。
------------------------------------------------------------
# LSBATCH: User input
------------------------------------------------------------
Successfully completed.
Resource usage summary:
CPU time : 86.20 sec.
Max Memory : 103 MB
Max Swap : 881 MB
Max Processes : 4
Max Threads : 5
The output (if any) is above this job summary.
因此,我希望我的包装脚本每隔5分钟检查一次每个运行(1、2、3),看看日志文件是否已经创建。如果已经创建,我希望包装脚本检查一下是否成功完成(也就是说,日志文件中是否出现了“Successfully completed”这个字符串)。
另外,如果其中一个运行完成后生成的日志文件没有成功完成,我希望我的包装脚本能够结束,并报告这个运行(k=1、2、3)没有完成。
之后,
第二步。如果所有三个运行都成功完成,我会运行另一个程序,使用这三个文件作为输入……否则我会打印一个错误信息。
基本上,我在问两个问题:
这样写一个包装脚本听起来好吗?
在Python中,我怎么能检查一个文件是否存在,并且每隔一段时间检查一次某个模式,比较好呢?
注意:我知道LSF有作业依赖关系,但我觉得这种方式更清晰,也更容易操作,尽管可能不是最优的。
1 个回答
我使用的是一个LSF系统,我主要的问题是退出处理和清理工作。我觉得一个不错的主意是发送一个批处理作业数组,比如说:初始化任务、准备工作任务和清理任务。这样LSF可以完成这三个任务,并把返回代码发送给等待的主节点。很多时候,LSF在发送一个作业或命令时表现得很好,但它并不是特别适合处理系统性的工作流程。
除此之外,祝你好运 :)