长期运行的数据处理Python脚本的程序结构

2024-05-23 18:08:17 发布

您现在位置: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,但问题是相对语言不可知的,假设是现代面向对象语言的特性。在


Tags: of实例代码in脚本formainlocal
3条回答

不太干净,但在小项目中效果很好。。。在

您可以开始使用模块,就好像它们是单例实例一样,并且只有当您感觉到模块的复杂性或计算证明了它们的合理性时,才能创建真正的类。在

如果你不想从模块中导入的话,你最好还是把它从模块中导入。此外,谷歌指南中也推荐了这一点。在

使用一个或多个类可以帮助您组织代码。 形式的简单性(例如通过使用类属性和方法)很重要,因为它可以帮助您了解算法,并可以帮助您更轻松地对部分进行单元测试。在

在我看来,这些好处远远超过了使用OOP可能带来的速度损失。在

首先,如果您的程序要运行数小时/天,那么切换到使用类/方法而不是将所有内容放在一个巨大的main中的开销几乎是不存在的。在

此外,重构(即使它涉及传递很多变量)从长远来看应该有助于提高速度。分析一个设计良好的应用程序要容易得多,因为你可以定位慢的部分并在那里进行优化。也许会有一个新的库来为你的计算进行高度优化。。。一个设计良好的程序可以让你马上插入测试。或者您决定编写一个C模块扩展来提高计算子集的速度,一个设计良好的应用程序也会使这一点变得容易。在

如果没有看到<lots of tightly coupled computation>和{},很难给出具体的建议。但是,我会从使每个for块都有自己的方法开始,然后从那里开始。在

相关问题 更多 >