ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

长时间运行的数据处理python脚本中的程序结构

2019-10-24 03:57:37  阅读:175  来源: 互联网

标签:maintainability language-agnostic python refactoring


对于我当前的工作,我正在编写一些长时间运行的脚本(需要花费数小时至数天),这些脚本需要进行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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有