长时间运行的数据处理python脚本中的程序结构
作者:互联网
对于我当前的工作,我正在编写一些长时间运行的脚本(需要花费数小时至数天),这些脚本需要进行CPU密集型数据处理.程序流程非常简单-它进入主循环,完成主循环,保存输出并终止:我程序的基本结构如下:
<import statements>
<constant declarations>
<misc function declarations>
def main():
for blah in blahs():
<lots of local variables>
<lots of tightly coupled computation>
for something in somethings():
<lots more local variables>
<lots more computation>
<etc., etc.>
<save results>
if __name__ == "__main__":
main()
这很快变得难以管理,因此我想将其重构为更易于管理的东西.我想使它更易于维护,而又不牺牲执行速度.
但是,每个代码块都依赖于大量变量,因此将部分计算重构为函数将使参数列表很快变得不可收拾.我应该将这种代码放入python类中,并将局部变量更改为类变量吗?从概念上讲,将程序转换为类并没有多大意义,因为该类将永远不会被重用,并且每个实例只能创建一个实例.
这种程序的最佳实践结构是什么?我使用的是python,但是假设现代的面向对象语言功能,问题相对于语言不可知.
解决方法:
首先,如果您的程序要运行数小时/天,那么切换到使用类/方法而不是将所有内容都放入一个巨大的main中的开销几乎是不存在的.
此外,重构(即使确实包含传递大量变量)也可以从长远来看帮助您提高速度.对设计良好的应用程序进行性能分析要容易得多,因为您可以查明较慢的部分并在那里进行优化.也许会出现一个针对您的计算进行了高度优化的新库…精心设计的程序将使您可以将其插入并立即进行测试.或者,也许您决定编写C模块扩展以提高部分计算速度,一个设计良好的应用程序也将使此操作变得容易.
在不看到<很多紧密耦合的计算>的情况下,很难给出具体的建议.和<更多计算>.但是,我将从使每个for块成为自己的方法开始,然后从那里开始.
标签:maintainability,language-agnostic,python,refactoring 来源: https://codeday.me/bug/20191024/1917569.html